在没有端口转发的情况下访问docker-machine VM端口

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

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

我有我的Windows主机,运行一个用docker-machine创build的虚拟机,在这个docker虚拟机里面,我正在运行一个简单的nginx服务器容器。

运行nginx容器将其80端口暴露给docker机8000。

docker run -d -p 8000:80 nginx 

而我试图实现的是能够从我的Windows使用浏览器打开此服务器。

如果我在Windows中使用curl(Git bash,而不是ssh-ed进入docker-machine虚拟机)使用docker-machine ip给我的IP,那么它可以工作。 但是,使用我的浏览器不(我目前正在使用Microsoft Edge),我可以让浏览器工作,如果我build立一个NAT端口转发。

 curl $(docker-machine ip dev):8000 

正如我已经读过,应该可以访问虚拟机端口,而不必为每个端口指定端口转发规则,VirtualBox应该自动公开和转发这些端口。

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

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

所以对于遇到这个问题的任何人,你使用的是Microsoft Edge(像我这样试用),切换浏览器。 Chrome甚至旧的IE工作正常。

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

如果你跑步

 docker-machine ip dev 

在你的shell中,它会打印一个你可以在你的网页浏览器中使用的IP地址。

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

在我的情况下,这是因为我的浏览器configuration了一个代理pac(Proxy_auto-config文件) ,它不包括192.169.xy内部boot2docker机器ips。

这意味着:

  • 浏览器尝试联系企业代理(并失败),
  • 而一个常规的CMD shell会话, NO_PROXY环境variables设置为192.168.xy ,将允许curl http://192.168.xy/...工作没有毛刺。