从iOS模拟器访问docker容器

我正在使用boot2docker来运行Docker镜像。 我非常清楚,我需要访问boot2docker的IP地址才能访问Docker容器。

基本上在terminal它curl $(boot2docker ip):49155

当我在Chrome或Safari上这样做时,一切似乎都很好。 当我在iOS模拟器(iOS 8)的Safari浏览器中input地址时,我收到消息: 由于networking连接丢失,Safari无法打开页面

我尝试在Python中运行一些其他localhost-ish应用程序 – SimpleHTTPServer ,通过0.0.0.0:4000访问,似乎工作得很好(iOS模拟器中的网站加载)。

这是一个在Docker / iOS模拟器中的错误,还是我必须做一些额外的设置?

boot2docker是在您的机器上运行的虚拟机。 您的Mac是“主机”,boot2docker机器是“guest”。 iOS模拟器也是一个“客人”。

访客机器可以通过多种方式获得他们的networking访问权限。 boot2docker设置为使用NAT,这实际上意味着你可以客户端到达任何地方,但是你只能从你的主机到达客户端。 iOS模拟器不是主机(它有自己的IP地址和自己的networking接口),所以它不能到达boot2docker guest。

最简单的解决方法是做端口转发。 boot2docker的指示提示类似

 boot2docker ssh -L 49155:localhost:49155 

这将导致主机上的端口49155(目前无所作为)将所有连接转发到boot2docker guest虚拟机上的端口49155。

现在从iOS模拟器,你可以到达你的服务器,就好像它在主机上: 0.0.0.0:49155 : 0.0.0.0:49155 。 如果您使用物理iOS设备,则需要获取Mac的外置IP地址并使用它。

这样的端口转发的替代方法是使用Vagrant自己设置虚拟机(运行boot2docker或CoreOS或任何最新的Linux),并让该虚拟机使用“桥接”networking(使访客可以从主机之外访问)。