해결
"start:dev": "cross-env NODE_ENV=local nest start --watch",
"start:prod": "cross-env NODE_ENV=prod node dist/src/main.js",
# 예시 코드
FROM node:14
# 삭제
# ENV NODE_ENV production
WORKDIR /app
COPY package.json .
RUN yarn install
COPY . .
CMD [ "yarn", "start:prod"]
개요
# 예시 코드
FROM node:14
ENV NODE_ENV production
WORKDIR /app
COPY package.json .
RUN npm install --production
COPY . .
CMD [ "node", "dist/src/main.js"]
Docker를 활용하면서 NODE_ENV 환경변수가 읽히지 않아 여러 문서를 읽어보았다. 찾아보아도 명확하게 알 순 없었고 운영체제에 따라서 달라질 수 있다는 것과 오타의 가능성뿐이었다.
Mac을 쓰고 있었고 그 외 오타도 하나하나 찾아보았을 때 딱히 이상한 점은 찾지 못했고 그 과정속에서 본거 또 보고 또 보고 또 보는 삽질기가 발생하게 되었다.
해결
계속 같은 부분에서 찾다보니 내가 잘못알고 있는 부분이 있다는 것을 깨달았고 다시 찾아보기 시작했다.
그 과정속에서 env 설정하는 다양한 방법이 있다는 것을 확인했고 같은 곳에서 잘못된 것을 뒤적거리는 것보다는 다른 곳으로 접근해보는 것을 시도했고 그 과정을 회고해보고자 기록했다.
package json script
env 변수를 js 파일을 실행할 때 결정할 수 있는데 그 명령어를 스크립트로 설정해둘 수 있다.
"start:dev": "NODE_ENV=local nest start --watch",
"start:prod": "NODE_ENV=prod node dist/src/main.js",
단순히 환경 변수를 설정하는 것 외에도 빌드,테스트 과정에서 필요한 옵션들을 CLI로 직접 타이핑하지 않아도 등록만 해두면 간단하게 실행시켜주는데 위 포스트를 참조하였다.
라이브러리 추가
운영체제에 따라서 달라질 수 있다고 하여 cross-env 라이브러리를 추가했다.
Window 환경에서도 호환성을 일치시켜준다고 하니 혹시 모를 문제에 대비해 설정했다
"start:dev": "cross-env NODE_ENV=local nest start --watch",
"start:prod": "cross-env NODE_ENV=prod node dist/src/main.js",
결론
# 예시 코드
FROM node:14
# 삭제
# ENV NODE_ENV production
WORKDIR /app
COPY package.json .
RUN yarn install
COPY . .
# 수정
CMD [ "yarn", "start:prod"]
이후 실행 커맨드도 바꿔놓았던 스크립트로 실행시킬 수 있도록 설정했고 문제없이 잘 실행되는 것을 확인할 수 있었다.
회고
docker를 개발하면서 문제가 워낙 많이 발생했었다. 하나로 적기엔 양이 조금 많아서 삽질했던 대로 분류를 해보려고 작성하였다.
워낙 오래 붙잡고 있어서 어디서 오류가 발생했었는지 확인해볼 부분도 너무 많다..
'TIL > 트러블슈팅' 카테고리의 다른 글
Google Cloud Platform, docker-compose로 배포하면서 겪은 이슈 (0) | 2023.02.24 |
---|---|
Google Cloud Platform 배포 삽질 (0) | 2023.02.21 |
Docker Error: Cannot find module '/usr/src/app/dist/main.js' (0) | 2023.01.30 |
docker 배포 시 cannot find module '..Route' or its corresponding type declarations. (0) | 2023.01.30 |
React-query getQueryData undefined가 발생하는 이유 (0) | 2023.01.24 |