我让Grunt在docker容器中的localhost:8080
上运行节点连接(grunt-contrib-connect)Web服务器。我用这个命令运行容器:
$ docker run --rm -it -p 8080:8080 js1972/yeoman:v3
。
在我的容器中,我使用grunt develop
运行grunt connect任务。
我在Mac上使用boot2docker。 boot2docker ip
表示主机IP为192.168.59.103,因此我应该在浏览器中使用http://192.168.59.103:8080访问连接服务器。
然而,这不起作用,我只是得到一个safari无法连接到服务器消息。 (请注意,当我在docker网站上使用一个简单的python web服务器时,端口转发工作正常。)
这里有什么想法吗?同样的过程在docker之外完美运行。 我感觉它与在localhost上运行Connect有关。我尝试了各种组合--add-hosts和-p localhost:8080:8080等等无济于事......
如果它有助于我的docker文件和gruntfile: https://dl.dropboxusercontent.com/u/7546923/Dockerfile https://dl.dropboxusercontent.com/u/7546923/Gruntfile.js
Rgds,Jason。
答案 0 :(得分:3)
将localhost
更改为0.0.0.0
。
此时容器仅在本地接口上侦听内部连接。使用0.0.0.0
将告诉它监听所有接口,包括Docker主机所连接的接口。
答案 1 :(得分:1)
在Gruntfile的连接设置中修改主机名的IP:
// The actual grunt server settings
connect: {
options: {
port: 8080,
// Change this to '0.0.0.0' to access the server from outside.
hostname: '0.0.0.0',
livereload: 35729
},
打开服务器并将端口重新加载到boot2docker vm:
boot2docker poweroff # vm needs to be off to modify the network settings
VBoxManage modifyvm "boot2docker-vm" --natpf1 "containergruntserver,tcp,,8080,,8080"
VBoxManage modifyvm "boot2docker-vm" --natpf1 "containergruntreload,tcp,,35729,,35729"
boot2docker up