访问docker-machine VM端口,无需端口转发

时间:2015-12-19 10:52:33

标签: docker portforwarding docker-machine

我正在尝试学习Docker,到目前为止,我遇到了很多在docker-machine中需要但在boot2docker中不需要的“解决方法”。

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

我有我的Windows主机,运行使用docker-machine创建的VM,并且在docker VM内部我正在运行一个简单的nginx服务器容器。

运行nginx容器,将其80端口暴露给docker-machine的8000。

docker run -d -p 8000:80 nginx

我正在努力实现的是能够使用浏览器从我的Windows打开此服务器。

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

curl $(docker-machine ip dev):8000

正如我所读到的,应该可以访问VM端口而无需为每个端口指定端口转发规则,VirtualBox应该自动公开和转发这些端口。

我做错了什么或者我是否必须为我想要使用的VM和主机操作系统之间的每个端口指定端口转发规则?

3 个答案:

答案 0 :(得分:2)

经过又一天的挖掘后,我有了疯狂的想法尝试另一种浏览器,它运行正常。

因此,对于遇到此问题并且您正在使用Microsoft Edge(尝试像我一样)的任何人,请切换浏览器。 Chrome甚至旧的IE工作正常。

答案 1 :(得分:0)

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

如果你跑

docker-machine ip dev
在你的shell中,它将打印一个你可以在你的网络浏览器中使用的IP地址。

如果您将此地址放在/etc/hosts(或您平台的模拟地址)中,则可以使用友好的别名作为IP地址。

答案 2 :(得分:0)

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

这意味着:

  • 浏览器尝试联系企业代理(并且失败),
  • 虽然常规CMD shell会话(NO_PROXY环境变量设置为192.168.x.y)允许curl http://192.168.x.y/...无故障地工作。