这是我在nestjs项目中的Dockerfile,位于nestjss文件夹的根目录
FROM node:21 AS production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/api
COPY package*.json ./
RUN npm install --global @nestjs/cli
RUN npm install --only=production
RUN apt-get -q update && apt-get -qy install netcat-openbsd
RUN npm install
COPY . .
RUN npm run build
CMD ["sh", "-c", "npm run start:prod"]
这是我在项目根目录下的docker-compose.yml文件:
version: "3.8"
services:
mongodb:
image : mongo:latest
container_name: mongodb
volumes:
- ./database:/data/db
ports:
- 27017:27017
networks:
- shared-network
restart: always
nginx:
image: nginx:latest
container_name: nginx-prod
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- 80:80
command: /bin/sh -c "nginx -g 'daemon off;'"
depends_on:
- api-prod
- app-prod
networks:
- shared-network
api-prod:
container_name: nestjs_api_prod
image: nestjs-api-prod:1.0.0
build:
context: nestjs-cars-app
target: production
dockerfile: Dockerfile
volumes:
- .:/usr/src/api
- /usr/src/api/node_modules
command: npm run start:prod
depends_on:
- mongodb
networks:
- shared-network
ports:
- 9000:9000
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "http://api-prod:9000"]
interval: 5s
timeout: 3s
retries: 6
app-prod:
container_name: react_app_prod
image: react-app-prod:1.0.0
build:
context: my-app
target: production
dockerfile: Dockerfile
command: npm run start:prod
ports:
- 3000:3000
networks:
- shared-network
restart: unless-stopped
networks:
shared-network:
driver: bridge
我尝试过docker compose构建,这没关系。但当我尝试docker compose-up时,我不断收到这个错误:
nestjs_api_prod|npm ERR!代码ENOENT
nestjs_api_prod|npm ERR!系统调用打开
nestjs_api_prod|npm ERR!路径/usr/src/api/package.json
nestjs_api_prod|npm ERR!错误号-2
nestjs_api_prod|npm ERR!enoent无法读取package.json:错误:enoent:没有这样的文件或目录,打开“/usr/src/api/package.json”
nestjs_api_prod|npm ERR!enoent这与npm找不到文件有关。
nestjs_api_prod|npm ERR!enoent
nestjs_api_prod|
nestjs_api_prod|npm ERR!此运行的完整日志可在以下位置找到:/root/.npm/_logs/2024-01-11T01_00_18_051Z-debug-0.log
nestjs_api_prod退出,返回代码254
有关更多信息,这是我的项目目录:
enter image description here