【发布时间】:2020-02-13 09:45:50
【问题描述】:
我正在 Docker 上以 Swarm 模式(单节点)构建 NodeJS 应用程序。我正在为 NodeJS 源代码使用绑定挂载卷。一切运行完美,我可以在 localhost 中看到 NodeJS 和 Express 的输出,但是当我在 NodeJS 代码(位于绑定挂载卷中)中更改某些内容时,没有任何变化。我必须重新启动服务才能观察更改。早些时候,当我只使用 Docker Compose 时,它从未发生过,但现在当我切换到 Swarm 时,我遇到了问题。
我在 macOS 10.14.6 上使用 Docker 18 和 Visual Studio Code 1.39
Dockerfile
FROM node:12-alpine
WORKDIR /node-dir
COPY package*.json ./
RUN npm install
docker-compose.yml 文件
# Docker-compose.yml
version: '3.7'
services:
node-service:
image: node-img:1.0
ports:
- 80:3000
working_dir: "/node-dir"
volumes:
- ./node-dir/source:/node-dir/source
networks:
- ness-net
command: npm start
networks:
ness-net:
我还读到这可能是由于 inode 造成的,大多数编辑器在保存文件时会断开链接。但它在 docker-compose 下使用 Visual Studio Code 正常工作,其行为仅在 Docker Swarm 中发生变化。
更新:我使用带有绑定挂载的 Nginx 提供了一个静态 html 文件,并且我可以使用 VS Code 轻松更改该文件并得到反映。它唯一没有检测到文件更改的 NodeJS。
【问题讨论】:
-
Swarm 是一个多主机容器管理系统;哪些主机有你的源代码,你如何得到它? (它应该将
COPYd 放入映像中,而不是从可能有也可能没有它的主机绑定安装。) -
我在单节点上使用 Swarm。我目前处于开发模式,需要反复测试源代码,所以我想使用绑定挂载,让开发和测试更容易。
-
这个问题绝对不在 docker swarm 模式方面。您可以轻松测试您是否可以动态编辑文件并使用为静态站点提供服务的简单 nginx 容器检查更改。所以我会专注于为什么 node 没有正确检测到更改。
-
你说得对,我使用 Nginx 提供了一个静态文件,并尝试使用 Visual Studio Code 从后端进行更改及其反映。现在主要问题是为什么 Node 没有检测到变化。
标签: docker docker-compose dockerfile docker-swarm docker-volume