node.js - 用于节点服务器的 Docker 撰写失败
问题描述
我编写了一个通过 npm 脚本 (npm run dev) 运行的节点服务器。我为它创建了以下 Dockerfile:
FROM node:10.12.0
ARG COMMIT_REF
ARG BUILD_DATE
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
ENV APP_COMMIT_REF=${COMMIT_REF} \
APP_BUILD_DATE=${BUILD_DATE}
ENV PORT 8009
EXPOSE 8009
CMD [ "npm", "run", "server" ]
构建和运行服务器:
docker build . -t server
并且docker run -it -p 8009:8009 --env-file .env server
运行良好,服务器在端口 8009 上运行和公开。
不,我尝试docker-compose.yml
为它创建。这是我写的:
version: '3'
services:
server:
image: server
build: .
env_file:
- .env
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
working_dir: /.
ports:
- 8009:8009
当我使用它运行它时,docker-compose up
我得到:
Starting bed_server_1 ... done
Attaching to bed_server_1
server_1 | npm ERR! path /package.json
server_1 | npm ERR! code ENOENT
server_1 | npm ERR! errno -2
server_1 | npm ERR! syscall open
server_1 | npm ERR! enoent ENOENT: no such file or directory, open '/package.json'
server_1 | npm ERR! enoent This is related to npm not being able to find a file.
server_1 | npm ERR! enoent
server_1 |
server_1 | npm ERR! A complete log of this run can be found in:
server_1 | npm ERR! /root/.npm/_logs/2019-02-04T22_27_50_916Z-debug.log
bed_server_1 exited with code 254
知道有什么问题吗?
解决方案
The image's CMD runs npm run server
in whatever directory it starts up in. The docker-compose.yml
working_dir: /
tells the container to start up in the root directory. That's not what you want; you want the container to start up in the directory you COPY'd its source code to.
You will probably fix your immediate issue if you remove the working_dir:
line.
推荐阅读
- java - 移回迭代时,while循环变为无限
- r - 计算R中函数内两个数据集之间的差异时如何保留数据集的ID
- azure - Kafka 流加载到数据帧显示数据 Azure 数据砖
- sass - 尽管在 args 中设置了 --no-cache,但由于缓存,无法在 WebStorm 中将 sass 用作文件观察程序
- bash - 为什么逗号“,”在 antlr 词法分析器的 [.] 类型表达式中被计算在内
- javascript - Javascript开始/停止按钮更改innerHTML并启动计时器,但不履行任何其他部分功能
- python - 如何在预提交挂钩中运行 django 测试
- c++ - 没有换行的 clang 格式(对于现有代码)
- python - 在 Python 中绘制 DWT 比例图
- list - Flutter 如何在 ListView 中加载 Future 列表?