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来监视和重新启动容器模式。