2015-12-19 29 views
1

我想学习Docker,到目前为止我遇到了很多docker-machine中需要的“work around”,但不是在boot2docker中。访问码头机VM端口没有端口转发

我目前的问题是从我的主机访问我的码头容器。

我有我的Windows主机,运行使用docker-machine创建的虚拟机,并在该docker虚拟机中运行一个简单的nginx服务器容器。

nginx的容器跑到暴露它的80端口泊坞窗机的8000

docker run -d -p 8000:80 nginx 

而且我想要做到的,是能够使用浏览器从我的Windows中打开此服务器。

如果我在Windows中使用docker-machine ip给我的IP使用curl(Git bash,而不是ssh-ed进入docker-machine VM),那么它就可以工作。但是使用我的浏览器不能(我目前使用的是Microsoft Edge),如果我设置了NAT端口转发,我可以使浏览器工作。

curl $(docker-machine ip dev):8000 

正如我读过它应该能够访问虚拟机端口,而不指定每个端口的端口转发规则,VirtualBox的要揭露和自动转发的。

我在做什么错或我必须为我想使用的虚拟机和主机操作系统之间的每个端口指定端口转发规则?

+0

你的意思是说:http:// <由docker-machine ip dev返回的ip:8000 /不起作用? – VonC

+0

是的,但只有当试图使用我的浏览器。由于它是一个Web服务器,我不打算一直使用卷曲! – Milton

回答

0

在Bash中,$(docker-machine ip dev)表示“运行命令docker-machine ip dev,取出该命令的输出并将其插入到命令行中”。

如果你在你的shell中运行

docker-machine ip dev 

,将打印,你可以在你的网页浏览器使用的IP地址。

如果你把这个地址放在/etc/hosts(或你的平台的模拟器)中,你可以使用友好的别名作为IP地址。

+0

是的,我能够得到我的码头机(码头主机)的IP,但将IP放入浏览器不起作用(除非我在码头机的NAT上有端口转发设置)。我发现了一些类似Docker Bridged模式的东西,我会尝试看看它是否符合我的要求(即避免需要手动指定所有端口转发端口)。 – Milton

2

经过另一天的挖掘,我有疯狂的想法尝试其他浏览器,它工作正常。

因此,如果有人遇到此问题,并且您使用Microsoft Edge(像我一样尝试),请切换浏览器。 Chrome浏览器甚至旧的IE都能正常运行。

0

就我而言,这是因为我的浏览器配置了proxy pac (Proxy_auto-config file),其中没有包含192.169.x.y内部boot2docker机器ips。

这意味着:

  • 浏览器尝试联系该企业代理(和失败),
  • 而普通CMD shell会话,设置为192.168.x.y一个NO_PROXY环境变量,将允许curl http://192.168.x.y/...工作没有小故障。