【发布时间】:2020-12-24 06:12:01
【问题描述】:
我在运行带有 NODE.JS 图像的多阶段 docker-compose 时遇到了一些问题。 在构建/运行多阶段 docker-compose 时,Node 容器在循环中重新启动,但是如果我使用具有以下参数的 Docker Run,则使用相同的映像构建它可以正常工作
Docker 运行:
docker run \
-it \
--name webportal
--rm \
-v ${PWD}:/app \
-v /app/node_modules \
-p 3001:3000 \
-e CHOKIDAR_USEPOLLING=true \
webnodeimg
在 dockerfile 上它的舞台是:
web:
build:
context: ./web/
dockerfile: ./Dockerfile
container_name: webportal
volumes:
- .:/app
- /app/node_modules
ports:
- '3001:3000'
environment:
- CHOKIDAR_USEPOLLING=true
文件夹结构如下
Root
├── docker-compose.yml
├── api
| ├── Other Folders...
│ ├── Dockerfile
│ └── Jenkinsfile
├── web
│ ├── debug.log
│ ├── docker-compose.yml
│ ├── Dockerfile
│ ├── Dockerfile-test
│ ├── Jenkinsfile
│ ├── node_modules
│ ├── package.json
│ ├── package-lock.json
│ ├── public
│ ├── README.md
│ ├── src
│ └── tsconfig.json
└──
节点 Dockerfile:
FROM node:lts
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
COPY package-lock.json ./
RUN npm install
RUN npm install react-scripts@3.4.1 -g --silent
COPY . ./
EXPOSE 3000
CMD ["npm", "start"]
检查日志时,我看到以下内容
> web@1.0.0 start /app
> react-scripts start
ℹ 「wds」: Project is running at http://172.26.0.2/
ℹ 「wds」: webpack output is served from
ℹ 「wds」: Content not from webpack is served from /app/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...
【问题讨论】:
-
为什么说这是multistage?我只看到一条
FROM指令。另外,你的日志是怎么说的? -
对不起,我的意思是我在 docker-compose 上构建了不同的服务,我在顶部添加了 Docker Logs 的输出
-
为什么说是不同的服务?我只看到您的 docker-compose.yml 文件中声明了一项服务。我也看不到您在哪里设置了重启策略。默认应该是不重启。您可以在 docker-compose.yml 文件中使用
restart: "no"明确说明这一点。此外,这些看起来不像 docker-compose 日志,它应该以服务名称为前缀。使用docker-compose logs web。 -
刚刚完成,与上面的输出相同,奇怪的是使用 docker-compose 它只是不起作用,但如果我使用 Docker Run 运行相同的图像,效果很好
-
“它只是不起作用”。你是什么意思?能走多远?容器是否遇到错误?你能介绍一些日志消息来看看它有多远吗?为什么会重启?显然,如果没有在容器中运行的代码,我无法重现您的问题。将其精简为一个简单的 hello world。或者把整个容器换成
tail -f /dev/null,看看是不是系统/docker问题。
标签: node.js docker docker-compose