如何在Docker容器中运行grunt-connect

3
我在Docker容器中运行了一个Node Connect (grunt-contrib-connect)网络服务器,端口号为localhost:8080。我使用以下命令运行容器:$ 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之外完美地工作。我有一种感觉是在本地主机上运行Connect的问题。我尝试了各种组合,如--add-hosts和-p localhost:8080:8080等,但都没有成功...如果有帮助的话,这是我的Docker文件和Gruntfile:https://dl.dropboxusercontent.com/u/7546923/Dockerfilehttps://dl.dropboxusercontent.com/u/7546923/Gruntfile.js。谢谢,Jason。

2
尝试将连接中的“localhost”更改为“0.0.0.0”。 - Adrian Mouat
谢谢Adrian - 这解决了问题,我永远不会想到这一点。现在需要阅读有关0.0.0.0、localhost和127.0.0.1之间区别的资料。;-) - Jason Scott
很好。0.0.0.0 只监听所有网络接口,而 127.0.0.1 则只监听本地回环接口(如果我没记错的话)。如果可以的话,我会添加一个答案。 - Adrian Mouat
2个回答

4

localhost更改为0.0.0.0

目前容器仅在本地接口上侦听内部连接。使用0.0.0.0将告诉它侦听所有接口,包括Docker主机连接到的接口。


2

在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虚拟机:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接