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

최은혁님의 프로필 이미지

작성한 질문수

AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)

build & production stage 구분해서 도커 이미지 크기 줄이기 실패

해결된 질문

작성

·

585

·

수정됨

0

build & production stage 구분해서 도커 이미지 크기 줄이기 강의에서 다음과 에러가 납니다.

(base)  david@davidui-MacBookPro  ~/workspace/express   dev ±  docker build -t my-express-app-light . -f ./DockerFile  
[+] Building 1.9s (13/13) FINISHED                                                                                                                              
 => [internal] load build definition from DockerFile                                                                                                       0.0s
 => => transferring dockerfile: 37B                                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                                          0.0s
 => => transferring context: 34B                                                                                                                           0.0s
 => [internal] load metadata for docker.io/library/node:18                                                                                                 0.8s
 => [build 1/5] FROM docker.io/library/node:18@sha256:f152130c9bb77afd49873a26fcfb6da7971b451ae6db51901fb7e028ccc0ca75                                     0.0s
 => [internal] load build context                                                                                                                          0.0s
 => => transferring context: 11.27kB                                                                                                                       0.0s
 => CACHED [build 2/5] COPY package*.json .                                                                                                                0.0s
 => CACHED [build 3/5] RUN npm install                                                                                                                     0.0s
 => CACHED [build 4/5] COPY . .                                                                                                                            0.0s
 => CACHED [build 5/5] RUN npm run build                                                                                                                   0.0s
 => CACHED [production 2/5] COPY --from=build ./build ./build                                                                                              0.0s
 => CACHED [production 3/5] COPY --from=build ./package.json .package.json                                                                                 0.0s
 => CACHED [production 4/5] COPY --from=build ./package-lock.json .package-lock.json                                                                       0.0s
 => ERROR [production 5/5] RUN npm install --only=production                                                                                               0.9s
------                                                                                                                                                          
 > [production 5/5] RUN npm install --only=production:
#13 0.561 npm WARN config only Use `--omit=dev` to omit dev dependencies from the install.
#13 0.885 npm ERR! Tracker "idealTree" already exists
#13 0.890 
#13 0.891 npm ERR! A complete log of this run can be found in: /root/.npm/_logs/2023-12-30T05_16_10_548Z-debug-0.log
------
executor failed running [/bin/sh -c npm install --only=production]: exit code: 1
(base)  ✘ david@davidui-MacBookPro  ~/workspace/express   dev ±  
 

 

 

답변 2

1

김시훈님의 프로필 이미지
김시훈
지식공유자

음 일단 WORKDIR가 누락되었네요.

누락되어도 실행이 될 수는 있지만 명확하게 어디에 어플리케이션 파일들이 있으며 RUN, CMD를 정확히 어떤 경로에서 실행시켜줄지 명시하는거라 포함시키는걸 권장합니다.

그리고 무엇보다 프러덕션 스테이지에 오타가 있습니다!

COPY를 하실 때 복사는 잘 하셨는데 붙여넣기에 보시면 파일명 앞에 / 가 두곳에서 누락되었습니다:

COPY --from=build ./package.json .package.json

여기서 마지막에 .package.json으로 하셨는데 이렇게 하면 root 경로에 package.json이라는 파일이 생성되는게 아니라 .package.json으로 .이 앞에 추가된 잘못된 파일명으로 생성이 됩니다. 그래서 프러덕션 스테이지에서 npm install을 하려고 할 때 오류가 발생합니다.

최은혁님의 프로필 이미지
최은혁
질문자

엇.. 정말 오타가!! 감사합니다.

이제 잘 실행됩니다!

0

최은혁님의 프로필 이미지
최은혁
질문자

작성한 DockerFile은 다음과 같습니다.

 

#Build stage
FROM node:18 as build

COPY package*.json .

RUN npm install

COPY . .

RUN npm run build

#Production stage
FROM node:18 as production

COPY --from=build ./build ./build
COPY --from=build ./package.json .package.json
COPY --from=build ./package-lock.json .package-lock.json

RUN npm install --only=production

CMD [ "npm", "start" ]