Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swarm重新启动之前,NodeJS不会检测Docker绑定装载的变化_Docker_Docker Compose_Dockerfile_Docker Swarm_Docker Volume - Fatal编程技术网

在Swarm重新启动之前,NodeJS不会检测Docker绑定装载的变化

在Swarm重新启动之前,NodeJS不会检测Docker绑定装载的变化,docker,docker-compose,dockerfile,docker-swarm,docker-volume,Docker,Docker Compose,Dockerfile,Docker Swarm,Docker Volume,我正在以Swarm模式(单节点)在Docker上构建一个NodeJS应用程序。我正在为NodeJS源代码使用bind mount volume。一切都运行得很好,我可以在localhost中看到NodeJS和Express的输出,但是当我在NodeJS代码(在绑定装载卷中)中更改某些内容时,什么都没有更改。我必须重新启动我的服务以观察更改。早些时候,当我只与Docker Compose合作时,这种情况从未发生过,但现在,当我切换到Swarm时,我遇到了一些问题 我正在macOS 10.14.6上

我正在以Swarm模式(单节点)在Docker上构建一个NodeJS应用程序。我正在为NodeJS源代码使用bind mount volume。一切都运行得很好,我可以在localhost中看到NodeJS和Express的输出,但是当我在NodeJS代码(在绑定装载卷中)中更改某些内容时,什么都没有更改。我必须重新启动我的服务以观察更改。早些时候,当我只与Docker Compose合作时,这种情况从未发生过,但现在,当我切换到Swarm时,我遇到了一些问题

我正在macOS 10.14.6上使用Docker 18和Visual Studio代码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代码下正常工作,它的行为只有在docker Swarm中才会改变


更新:我使用带有bind mount的Nginx提供了一个静态html文件,我可以使用VS代码轻松地更改该文件,并将其反映出来。它是唯一一个没有检测到文件更改的NodeJ。

如果卷映射正确,源代码更改应该到达node.js应用程序容器

在docker主机上进行更改后,可以通过检查容器中的源代码来验证它

我目前处于开发模式,我必须测试源代码 重复使用,所以我想使用绑定挂载进行开发和 测试更容易

然而,在容器中的节点进程重新加载并接受更改之前,源代码更改不会有效

为了实现这一点,你必须。Nodemon将拾取源代码中的更改,并随更改一起重新加载节点进程


另一个较长的替代方案是构建新的docker映像,然后使用更新应用程序:
docker服务更新--image=…

Swarm是一个多主机容器管理系统;哪些主机有您的源代码,您是如何获得源代码的?(它应该将
复制到映像中,而不是从可能有或可能没有它的主机绑定装载。)我在单节点上使用Swarm。我目前处于开发模式,我必须反复测试源代码,所以我想使用绑定挂载来简化开发和测试。这个问题肯定不在docker swarm模式方面。您可以很容易地测试是否可以动态编辑文件,并使用服务于静态站点的简单nginx容器检查更改。因此,我将重点讨论node未能正确检测到更改的原因。您是对的,我使用Nginx提供了一个静态文件,并尝试使用VisualStudio代码及其映射从后端进行更改。现在主要的问题是为什么Node没有检测到更改。