Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Javascript 如何在docker容器内一口气运行livereload?_Javascript_Docker_Gulp_Livereload - Fatal编程技术网

Javascript 如何在docker容器内一口气运行livereload?

Javascript 如何在docker容器内一口气运行livereload?,javascript,docker,gulp,livereload,Javascript,Docker,Gulp,Livereload,我创建了一个docker容器来运行gulp任务。 所有任务都在运行,问题是我无法在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-c

我创建了一个docker容器来运行gulp任务。 所有任务都在运行,问题是我无法在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"]
我使用以下命令创建图像:

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=[]:发布容器᾿s端口或主机的一系列端口

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

hostPort
containerPort
都可以指定为一系列端口

为这两个端口指定范围时,范围中的容器端口数必须与范围中的主机端口数>相匹配。(例如,
-p1234-1236:1234-1236/tcp
) (使用“docker端口”查看实际映射)

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

由于这不方便,您应该使用
-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
处理端口的一种更简单的方法是在中运行docker容器。在此模式下,容器上打开的任何端口实际上都在主机网络接口上打开(它们实际上共享同一接口)

然后,您可以使用以下内容启动容器:

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

在您的run命令中,我没有看到
-p80
等等?您是在Windows还是OS X上?我是在Linux(mint)上,我尝试了使用命令
docker run--name=gulp\u container-I-t-p80-p35729--rm v/var/www/my\u app:/var/www/my\u app:rw gulp\u image bash
。当我运行
docker ps-a
时,我可以看到我的Dockerfile中启用的端口被考虑在内。