如何在码头集装箱内使用gulp运行livereload?
我创建了一个docker容器来运行吞噬任务。 所有任务都在运行,问题是我无法在Chrome中启用livrereload,但我公开了35729端口在我的容器中。如何在码头集装箱内使用gulp运行livereload?
这里是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"]
我创建使用以下命令图像:
docker build -t gulp_image .
我创建了一个容器:
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
hostPort
和containerPort
都可以被指定为一个范围的端口。指定两者的范围时,范围内的容器端口数必须与该范围内的主机端口数>相匹配。 (例如,
-p 1234-1236:1234-1236/tcp
) (使用“泊坞窗口”看到实际的映射)
既然你试过-p containerPort
形式,实际的端口主机(Linux Mint的)上打开随机由搬运工人选择当您运行docker run
命令。要确定选择了哪个端口,您必须使用docker port
命令。
由于这样不方便,您应该使用-p hostPort:containerPort
表单,并指定hostPort
为35729
。(我还以为你希望端口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
更简单的方法来处理端口是在host networking mode中运行您的码头集装箱。在这种模式下,容器上打开的任何端口实际上都在主机网络接口上打开(它们实际上都共享相同的接口)。
你会再开始你的容器:
docker run --name=gulp_container -i -t --rm \
-v /var/www/my_app:/var/www/my_app:rw \
--net=host \
gulp_image bash
运行中的命令
谢谢@Thomasleveil!它完美的工作! – jiboulex
,我没有看到'-p 80'and这样吗? – user2915097
你在Windows或OS X上吗? – Thomasleveil
我在Linux上(薄荷) 我用命令'docker run --name = gulp_container -i -t -p 80 -p 35729 --rm -v/var/www/my_app:/ var/www/my_app :rw gulp_image bash'但它不是更好。 当我运行docker ps -a时,我可以看到我的Dockerfile中已启用的端口已考虑在内。 – jiboulex