docker - workdir 中没有这样的文件或目录
问题描述
我正在尝试用 Docker 包装我的 node express 后端。但是,在运行我的 docker-compose 文件时。npm install
我在整个 dockerfile 中运行 stage 时遇到错误,说它没有找到将我本地目录中的 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"]
码头工人/nginx/码头工人文件
FROM nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf
码头工人/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;
}
}
码头工人-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"
解决方案
您已经设置了上下文:
context: ./docker
所以当你跑
COPY . ./
您正在从该上下文复制文件,其中不包括package.json
. 您可以指定 Dockerfile:
express:
container_name: express_container
build:
dockerfile: ./docker/Dockerfile
environment:
ports:
- "5000:5000"
但我建议重组文件夹以在有意义的情况下将每个图像分开。
推荐阅读
- python - 熊猫:有一个日期时间列,每个单元格需要减去 4 秒
- angular - 为什么我的表格内容正在更新,但我的排序和分页没有?
- ruby-on-rails - 如果电子邮件在 Ruby 中包含“+”到 %2B,如何对其进行编码
- javascript - 为未定义的变量填充 javascript 变量检查?
- python - 合并两个字典?
- protractor - 验证排序选项是否适用于量角器
- r - 缺失数据警告 R
- c# - 如何使用 C# 在 Gridview 上查找 HTML 标签元素
- node.js - 如何使 expressjs/ejs 中的样式表呈现通用?
- swift - 我想通过单击 UISegmented Control 来切换 UIView 但我的代码不起作用