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
Node.js 为什么不是';t使用Docker重新启动服务器/更新代码+;Nodejs?_Node.js_Docker - Fatal编程技术网

Node.js 为什么不是';t使用Docker重新启动服务器/更新代码+;Nodejs?

Node.js 为什么不是';t使用Docker重新启动服务器/更新代码+;Nodejs?,node.js,docker,Node.js,Docker,我的docker文件非常简单: FROM node:4-onbuild RUN npm install gulp -g; EXPOSE 8888 此图像将自动运行package.json中的start脚本,我将其设置为gulp 如果我在主机上运行gulp,并更改节点文件,它会自动重新启动服务器: var gulp = require('gulp'); var nodemon = require('gulp-nodemon'); gulp.task('default', function()

我的docker文件非常简单:

FROM node:4-onbuild
RUN npm install gulp -g;
EXPOSE 8888
此图像将自动运行
package.json
中的
start
脚本,我将其设置为
gulp

如果我在主机上运行
gulp
,并更改节点文件,它会自动重新启动服务器:

var gulp = require('gulp');
var nodemon = require('gulp-nodemon');

gulp.task('default', function() {
  nodemon({
    script: 'server.js', // starts up server on port 4000
    env: { 'NODE_ENV': 'development' }
  })
});
我运行这个:
docker run-d-p1234:4000-v$(pwd):/usr/src/app my image


转到
http://192.168.99.100:1234/
显示“你好,世界!”从我的
server.js
文件。更新文件不会通过再次点击该URL来更新我看到的内容。如果我执行到容器中,我会看到文件已更新。由于容器通过同一个gulp命令启动了node,我不明白为什么node服务器不会重新启动并显示更新;这是因为您需要将nodemon设置为轮询文件系统的更改,如下所示:

在某些网络环境中(例如在安装的驱动器上运行nodemon reading的容器),您需要使用legacyWatch:true,它启用了Chokidar的轮询

通过CLI,使用--legacy watch或-L

较长的版本是这样的(有一个关键假设-您正在Mac或类似平台上使用docker):

在Mac或类似设备上,docker不以本机方式运行,而是在虚拟机内运行(通常通过docker机器在虚拟机中运行)。虚拟机通常不会传播文件系统inotify事件,这是大多数观察者在文件更改时重新启动或执行操作所依赖的。由于虚拟机不从主机传播事件,Docker从不接收事件。您的原始docker文件可能在本机linux机器上工作

关于这一点,有一个悬而未决的问题和更详细的讨论