我正在使用boot2docker来运行Docker镜像。我非常清楚我需要访问boot2docker的IP地址才能访问Docker容器。
终端基本上是curl $(boot2docker ip):49155
当我在Chrome或Safari中这样做时,一切似乎都很好。当我在iOS模拟器(iOS 8)中的Safari浏览器中输入地址时,收到消息:由于网络连接丢失,Safari无法打开页面。
我尝试在Python中运行其他一些localhost-ish应用程序 - SimpleHTTPServer
,可通过0.0.0.0:4000
访问,这似乎工作得很好(网站在iOS模拟器中加载)。
这是Docker / iOS模拟器中的错误还是我必须做一些额外的设置?
答案 0 :(得分:5)
boot2docker是在您的计算机上运行的VM。你的Mac是“主机”,boot2docker机器是“客户”。 iOS模拟器也是“访客”。
来宾计算机可以通过多种方式获取其网络访问权限。 boot2docker设置为使用NAT,这实际上意味着您可以在任何地方从 从您的主机。 iOS模拟器不是主机(它有自己的IP地址和自己的网络接口),因此无法访问boot2docker来宾。
最简单的解决方法是进行端口转发。 boot2docker's instructions建议类似
boot2docker ssh -L 49155:localhost:49155
这会导致主机上的端口49155(当前无效)将所有连接转发到boot2docker guest虚拟机上的端口49155。
现在,从iOS模拟器中,您可以像访问主机一样访问您的服务器:0.0.0.0:49155
。如果您使用物理iOS设备,则需要获取Mac的外部IP地址并使用它。
像这样的端口转发的替代方案是使用Vagrant自己设置VM(运行boot2docker或CoreOS或任何最近的Linux)并让该VM使用“桥接”网络(这使得访客可以从主机外部访问) )。