【发布时间】:2021-10-31 20:31:35
【问题描述】:
我正在尝试用 Docker 包装我的 node express 后端。但是,在运行我的 docker-compose 文件时。我在整个 dockerfile 中运行 npm install 阶段时遇到错误,说它没有找到在我的本地目录中复制的 package.json 到我的容器内的目录。下面是我的项目目录结构。尝试使用 nginx 代理我的 node express 后端 API。任何可以帮助我努力实现的资源都非常感谢。
错误日志:
> [4/5] RUN npm install:
#8 0.697 npm ERR! code ENOENT
#8 0.697 npm ERR! syscall open
#8 0.697 npm ERR! path /app/package.json
#8 0.698 npm ERR! errno -2
#8 0.699 npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
项目目录:
express-backend
├── docker
| ├── nginx
| | ├── nginx.conf
| | └── dockerfile
| └── dockerfile
├── src
| ├── model
| | └── model.ts
| ├── controller
| | └── controller.ts
| ├── middleware
| | └── middleware.ts
| └── server.ts
| .dockerignore
| .gitignore
| docker-compose.yml
| package-lock.json
| package.json
| tsconfig.json
码头工人/码头工人文件:
FROM node:alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . ./
EXPOSE 5000
RUN npm run build
CMD ["node", "/app/build/server.js", "npm run start"]
docker/nginx/dockerfile
FROM nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf
docker/nginx/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name nodeserver;
location / {
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:5000;
}
}
docker-compose.yml
version: "3.8"
services:
express:
container_name: express_container
build:
context: ./docker
environment:
ports:
- "5000:5000"
nginx:
container_name: nginx_container
restart: always
build:
context: ./docker/nginx
ports:
- "80:80"
postgres:
container_name: postgres_container
image: postgres
restart: always
environment:
ports:
- "5432:5432"
pgadmin:
container_name: pgadmin_container
image: dpage/pgadmin4
restart: always
environment:
ports:
- "5050:80"
【问题讨论】:
标签: docker docker-compose dockerfile