我正在 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 造成的,大多数编辑器在保存文件时都会破坏链接。但它在使用 Visual Studio Code 的 docker-compose 下可以正常工作,其行为仅在 Docker Swarm 中发生变化。
更新:我使用带有绑定安装的 Nginx 提供了一个静态 html 文件,并且我可以使用 VS Code 轻松更改该文件,并且它会得到反映。它是唯一不检测文件更改的 NodeJS。
如果您的卷映射正确,源代码更改应该到达您的node.js 应用程序容器。
在 docker 主机上进行更改后,您可以通过检查容器内的源代码来验证它。
我目前处于开发模式,我必须测试源代码
反复,所以我想使用绑定安装来进行开发和
测试更容易。
但是,在容器内的节点进程重新加载并获取更改之前,您的源代码更改不会生效。
为了实现这一目标,你必须使用nodemon。 Nodemon 将选取源代码中的更改并随着更改重新加载节点进程。
另一种更长的替代方案是构建新的 docker 映像,然后使用以下命令更新您的应用程序:docker service update --image=...
您还可以使用tilt自动执行所有上述操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)