해결된 질문
작성
·
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" ]
엇.. 정말 오타가!! 감사합니다.
이제 잘 실행됩니다!