我一直在嘗試為 Nestjs 應用程式、mysql 和 redis 設定 docker-compose 有一段時間了。我已經讓 mysql、redis 和 nestjs 開發容器正常作業。當我嘗試在生產中為 nestjs 設定一個額外的容器時,問題就來了,在此程序中我遇到了一些問題。
簡而言之,我遇到的最常見錯誤是 npm 無法在當前作業區中找到 package.json,盡管我在運行導致錯誤的命令之前復制了它(要么是 npm install或 npm 運行構建)。
/docker-compose.yml
version: '3.8'
networks:
nesjs-network:
driver: bridge
services:
redis:
container_name: nestjs_redis
image: redis
environment:
- ALLOW_EMPTY_PASSWORD=yes
networks:
- nesjs-network
ports:
- '${FORWARD_REDIS_PORT:-5003}:6379'
dev:
container_name: nestjs_dev
image: nestjs-api-dev:1.0.0
build:
context: ./Docker
target: development
dockerfile: Dockerfile
command: npm run start:dev
ports:
- 3000:3000
- 9229:9229
networks:
- nesjs-network
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
restart: unless-stopped
env_file: '.env'
depends_on:
- database
- redis
links:
- database
- redis
prod:
container_name: nestjs_prod
image: nestjs-api-prod:1.0.0
build:
context: ./Docker
target: production
dockerfile: Dockerfile
# command: npm run start:prod
ports:
- 3000:3000
- 9229:9229
networks:
- nesjs-network
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
restart: unless-stopped
env_file: '.env'
depends_on:
- database
- redis
links:
- database
- redis
database:
build:
context: ./Docker
dockerfile: mysql8.Dockerfile
image: mysql/mysql-server:latest
container_name: database
restart: unless-stopped
tty: true
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
env_file: '.env'
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --authentication_policy=mysql_native_password --host_cache_size=0
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_NAME}'
MYSQL_USER: '${DB_USER}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
TZ: '${APP_TIMEZONE-America/New_York}'
networks:
- nesjs-network
volumes:
- dbdata:/var/lib/mysql:rw,delegated
#Volumes
volumes:
dbdata:
driver: local
/碼頭工人/碼頭工人檔案
###################
# BUILD FOR LOCAL DEVELOPMENT
###################
FROM node:18-alpine AS development
WORKDIR /usr/src/app
COPY package*.json ./
# RUN apk add --nocache udev ttf-freefont chromium git
RUN apk add udev ttf-freefont chromium git
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
ENV CHROMIUM_PATH /usr/bin/chromium-browser
RUN npm install -g npm@8.19.2
RUN npm install glob rimraf
# RUN npm install --only=development
RUN npm ci
COPY . .
# Nest line needs to be tested
EXPOSE 3000
EXPOSE 9229
###################
# PRODUCTION
###################
FROM node:18-alpine as production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/app
COPY package*.json ./
RUN apk update \
&& apk add ca-certificates wget \
&& update-ca-certificates
# RUN apk add --nocache udev ttf-freefont chromium git
RUN apk add udev ttf-freefont chromium git
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true
ENV CHROMIUM_PATH /usr/bin/chromium-browser
# RUN npm install -g [email protected]
# RUN npm install glob rimraf
# RUN npm install --only=production
RUN npm ci
COPY . .
EXPOSE 3000
EXPOSE 9229
COPY --from=development /usr/src/app/dist ./dist
# RUN npm run build
CMD ["node", "dist/main"]
無論我添加或更改多少調整,我都會不斷收到相同型別的錯誤。每次復制檔案并更改為節點用戶(USER節點)時,我也嘗試使用 --chown=node:node ,但沒??有任何變化。
我得到的最常見的錯誤:
=> ERROR [build 7/8] RUN pm run build
> [build 7/8] RUN nom run build:
#0 0.518 pm ERR! code ENOENT
#0 0.519 nom ERR! syscall open
#0 0.519 pm ERR! path /usr/src/app/package.json
#0 0.520 nom ERR!
errno
-2
#0 0.521 pm ERR! enoent ENOENT: no such file or directory, open '/usr/src/app/package.json'
#0 0.521 pm ERR! enoent This is related to pm not being able to find a file.
#0 0.521 pm ERR! enoent
#0 0.522
#0 0.522 pm ERR! A complete log of this run can be found in:
#0 0.522 nom ERR!
/root/.npm/_logs/2022-10-15T19_02_39_449Z-debug-0.log
failed to solve: executor failed running [/bin/sh -c pm run build]: exit code: 254
有誰知道我可能做錯了什么?所有容器都可以正常作業,包括用于 Nestjs 的 dev 容器,但制作用于生產的容器卻沒有運氣。
uj5u.com熱心網友回復:
正如大衛在問題評論中所建議的那樣,在 docker-compose 構建背景關系中使用 ./Docker 會導致 Dockerfile 中出現這些路徑問題:
prod:
container_name: nestjs_prod
image: nestjs-api-prod:1.0.0
build:
context: ./Docker
target: production
dockerfile: Dockerfile
一旦我將其更改為:
prod:
container_name: nestjs_prod
image: nestjs-api-prod:1.0.0
build:
context: .
target: production
dockerfile: docker/Dockerfile
該錯誤沒有再次發生,npm 能夠毫無問題地找到 package.json 檔案!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/516654.html
標籤:节点.js码头工人码头工人撰写dockerfile巢穴
