인프런 커뮤니티 질문&답변

꿀밤양갱님의 프로필 이미지

작성한 질문수

초보를 위한 도커 안내서

[개인실습] Hellonode 실습

hellonode 실습 질문있습니다.

작성

·

85

0

도커 이미지 만들기 - 웹 애플리케이션 (nodejs) 강의처럼

hellonode 이미지의 dockerfile에 아래와 같이 작성하였고,

FROM node:latest
COPY . /usr/src/app
EXPOSE 8080
CMD node server.js


node라는 디렉토리에 dockerfile 및 server.js 파일을 생성했으며, node 디렉토리에서 아래와 같이 docker 명령어를 실행했습니다.

docker build -t my-node .

docker run --rm -p 60000:8080 my-node
이미지를 실행시키니,
server.js를 찾을 수 없다고 합니다.


답안지에 따라서 dockerfile을 아래와 같이 작성하니 성공하긴 했습니다.
FROM node:latest COPY server.js /app/ EXPOSE 8080 CMD ["node", "/app/server.js"]


제가 궁금한 점은,
왜 제가 강의를 보고 처음 시도한 dockerfile로는 에러가 발생하는지 모르겠습니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용을 검토하고, 관련된 유사한 내용을 찾아보았습니다. 꿀밤양갱님의 질문은 도커 이미지 만들기 중 server.js 파일을 찾지 못하는 문제와 관련되어 있습니다. 꿀밤양갱님께서 처음 시도하신 Dockerfile로 에러가 발생하는 이유는 COPY 명령어 사용 방식과 관련 있어 보입니다.

첫 번째 Dockerfile에서는 현재 디렉토리의 모든 파일을 /usr/src/app에 복사하고 있습니다. 그러나 CMD node server.js 명령어는 컨테이너의 루트 디렉토리(/)에서 server.js를 실행하려고 시도합니다. 하지만 server.js 파일은 /usr/src/app 디렉토리 안에 있기 때문에 Node.js가 해당 파일을 찾을 수 없어 발생하는 오류입니다.

이 문제를 해결하기 위한 한 방법은 꿀밤양갱님께서 수정하신 바와 같이 server.js 파일의 실제 위치를 CMD 명령어에 정확하게 지정하는 것입니다. 이 경우, 파일이 COPY를 통해 복사된 위치를 정확히 지정하여 Node.js가 해당 파일을 찾을 수 있도록 해야 합니다.

관련된 내용을 좀 더 자세히 알고 싶으시다면, 비슷한 문제를 겪고 답변을 받은 유사한 질문 링크를 첨부하겠습니다:

  • fastify 실행시 node 버전 관련 - 이 질문 역시 Node.js와 관련된 도커파일 설정 문제를 다루고 있으며, node_modules의 보다 구체적인 위치와 관련된 문제점을 해결하는 방안을 제시합니다.

질문자님의 경우는 Dockerfile 내에서 COPY 명령어와 CMD 명령어를 사용할 때, 파일의 위치와 명령어 실행 컨텍스트를 명확히 지정해주어야 한다는 점을 강조하고 싶습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

꿀밤양갱님의 프로필 이미지
꿀밤양갱
질문자

저의 dockerfile에 대한 문제점은 이해하였습니다. 감사합니다.
그런데, 웹 애플리케이션 (nodejs) 강의에서의 dockerfile은 왜 에러없이 CMD node app.js가 잘 작동되었는지 궁금합니다. 왜냐하면 /usr/src/app 경로로 동일했거든요.