如何在Docker容器中运行grep的livereload?

我创build了一个docker容器来运行任务。 所有任务正在运行,问题是我不能在Chrome中启用livrereload,虽然我暴露了我的容器中的35729端口。

这是Dockerfile:

FROM ubuntu:latest MAINTAINER jiboulex EXPOSE 80 8080 3000 35729 RUN apt-get update RUN apt-get install curl -y RUN apt-get install software-properties-common -y RUN add-apt-repository ppa:chris-lea/node.js RUN apt-get update RUN apt-get install nodejs -y RUN curl -L https://www.npmjs.com/install.sh | sh RUN npm install --global gulp -y # overwrite this with 'CMD []' in a dependent Dockerfile CMD ["/bin/bash"] 

我使用以下命令创build映像:

 docker build -t gulp_image . 

我创build一个容器:

 docker run --name=gulp_container -i -t --rm -v /var/www/my_app:/var/www/my_app:rw gulp_image bash 

然后在我的容器中

 cd /var/www/my_app gulp 

这是我的Gulpfile.js

 var gulp = require('gulp'), livereload = require('gulp-livereload'), exec = require('child_process').exec; gulp.task('js', function() { gulp.src([ './src/js/*.js' ]).pipe(livereload()); }); gulp.task('watch', function(){ var onChange = function (event) { console.log('File '+event.path+' has been '+event.type); }; livereload.listen(); gulp.watch([ './src/js/*.js' ], ['js']) .on('change', onChange); }); gulp.task('default', ['watch', 'js']); 

当我编辑一个js文件时,我可以在我的容器中看到文件被处理,但是当我尝试在浏览器(Chrome)中启用实时重新加载时,我收到以下消息:“无法连接到LiveReload服务器..”

任何人都知道我错过了什么或没有做什么? 谢谢阅读 !

暴露容器中的端口并不意味着端口将在Docker主机上打开。 你应该使用docker run -p选项。 该文件说:

-p = []:将容器端口或一系列端口发布到主机

格式: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort

hostPortcontainerPort都可以被指定为一个范围的端口。

为两者指定范围时,范围内的容器端口数必须与该范围内的主机端口数>相匹配。 (例如-p 1234-1236:1234-1236/tcp )(使用' -p 1234-1236:1234-1236/tcp port'来查看实际映射)

由于您尝试了-p containerPort表单,因此在运行docker run命令时,由主机(Docker)随机select在主机(Linux mint)上打开的实际端口。 要确定select了哪个端口,您必须使用docker port命令。

由于这样不方便,您应该使用-p hostPort:containerPort表单,并指定hostPort35729(我也假设你期望端口80,8080和3000可以以同样的方式访问)

运行你的容器的命令将是:

 docker run --name=gulp_container -i -t --rm \ -v /var/www/my_app:/var/www/my_app:rw \ -p 35729:35729 \ -p 80:80 \ -p 8080:8080 \ -p 3000:3000 \ gulp_image bash 

处理端口更简单的方法是在主机联网模式下运行docker容器。 在这种模式下,容器上打开的任何端口实际上都在主机networking接口上打开(它们实际上都共享相同的接口)。

然后你将开始你的容器:

 docker run --name=gulp_container -i -t --rm \ -v /var/www/my_app:/var/www/my_app:rw \ --net=host \ gulp_image bash 
Interesting Posts