Docker:用nodemon重新加载一个nodejs应用程序

我有一个你好,我用nodemon运行的世界快车应用程序,以便每当我更改文件服务器重新启动。

我将该应用程序打包为泊坞窗图像。

Dockerfile

 FROM node:6.3.0 RUN mkdir -p /opt/app WORKDIR /opt/app COPY . /opt/app RUN npm install EXPOSE 3000 CMD ["npm", "start"] 

npm start运行package.json中定义的nodemon -L index.js

但是,每当我对应用程序进行更改时,都无法生成映像。 我也有一个docker-compose.yml文件,我在其中指定了build选项,但仍然无法获取容器来重新加载

 version: "2" services: rpro: build: . command: npm start ports: - "3000:3000" volumes: - /opt/app 

这里是整个回购


如何使用Docker容器实现文件更改的服务器重启? 在这种情况下,通常的开发工作stream程是什么?

嗯,这个问题似乎是docker-compose.yml volumes参数。 将其更改为

 volumes: - .:/opt/app 

使其工作。 它告诉docker安装应用程序文件夹. 在主机上的容器中的/opt/app

然后在做docker-compose up ,服务器在文件改变的情况下重新启动。

不知道如果我会调用这个问题,因为它是通常的工作stream程 – 当文件更改驻留在容器中时,将触发重build。 如果你不把这个文件放在容器中,那么@jatin提到的就不会这样做,你可以通过- .:/opt/app或者类似的方式来链接你的Compose目录。

如果你这样做,你不需要使用COPY . /opt/app COPY . /opt/app ,因为它会挂载在该目录中。

注意docker-compose up --build Docker不会重build(重新启动服务器),如果挂载的卷中的文件发生变化,只有在构build文件发生变化的时候。 由于看起来您正在通过nodemon观看文件,因此可能会重新启动(因为您正在使用传统监视器,请注意,有些情况下可能无法识别文件更改)。

这对于开发来说基本上是很好的,但是在生产中,显然你不想使用watch而且如果退出( restart: always ),或者在非守护进程中使用进程pipe理器,很可能会使用Docker来监视和重新启动容器模式。