해결된 질문
작성
·
62
1
11분 50초에 3030을 사용하는 포트가 없기 때문에 정상적인 응답이 오지 않는다고 말씀하셨는데요, envnodecolorapp 내부적으로 3000 포트를 사용한다고 명시했기 때문에 응답이 오지 않는게 맞나요? 3030은 왜 사용이 불가한지 이해가 잘 가지 않습니다
답변 2
0
tjrwn0716님 안녕하세요. 데브위키입니다.
먼저 3030포트로 정상적인 응답이 오지 않는 이유는 내부에서 실행되는 nodecolorapp이 3000포트를 사용하기 때문입니다! 포트는 애플리케이션이 정보를 받아들이는 통로이고, 애플리케이션 소스코드 내에 직접 지정되어 있습니다. 따라서 nodecolorapp은 3000이 아닌 포트의 요청은 받을 수 없도록 개발되어 있습니다.
아래는 nodecolorapp의 소스 코드 중 일부입니다. 포트 3000번이 코드 내에 지정되어 있습니다.
app.listen(3000, () => {
console.log(`Simple Node.js web app is running at http://localhost:3000`);
});
inspect로 확인하셨을 때 3030에 8002번이 세팅된 이유는, 말씀해주신 대로 run 명령으로 컨테이너를 실행하실 때 -p 8002:3030으로 포트포워딩하셨기 때문입니다. 3000은 Dockerfile에 EXPOSE로 3000이 되어있기 때문에 기본적인 포트로 나타나지만 포트포워딩하지 않았기 때문에 null로 표시됩니다.
결론적으로 Dockerfile에서 EXPOSE로 포트를 지정하는것과 애플리케이션이 실제로 사용하는 포트는 다르다는 것이 중요한 포인트로 보입니다!
도커파일에서 EXPOSE로 포트를 명시하는 것은 말 그대로 애플리케이션이 사용하는 포트를 표시만 하는는 것입니다. 실제로 애플리케이션이 받아들이는 포트는 소스 코드 내에 지정되어 있습니다. 그래서 포트포워딩을 하실 경우에는 실제 애플리케이션이 사용하는 포트로 포트포워딩을 하셔야 정상적으로 동작이 가능합니다.
혹시 이해가 잘 되지 않으셨거나 더 궁금하신 점 있으시면 편하게 질문해주세요!
0
inspect 시에 아래와 같이 3000은 null 이고 3030에 세팅이 된 이유를 잘 모르겠습니다(run시에 8002:3030으로 주어서 된건 알지만, 3000에 null이 들어가고 3030에 세팅된 이유를요 !)