从iOS模拟器访问Docker容器

7
我正在使用boot2docker来运行Docker镜像。我知道我需要访问boot2docker的IP地址才能访问Docker容器。
在终端中,基本上可以使用curl $(boot2docker ip):49155
当我在Chrome或Safari中这样做时,一切似乎都很好。但是,在iOS模拟器(iOS 8)的Safari浏览器中输入地址时,我收到了这条消息:Safari无法打开页面,因为网络连接已丢失
我尝试运行其他类似localhost的应用程序——Python中的SimpleHTTPServer,可通过0.0.0.0:4000进行访问,这似乎完全正常(网站在iOS模拟器中加载)。
这是Docker/iOS模拟器的错误还是我需要进行一些额外的设置?
1个回答

6

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

客人机可以通过多种方式获得网络访问权限。boot2docker被设置为使用NAT,这实际上意味着您可以从客人到任何地方,但只能从您的主机机器到客人。iOS模拟器不是主机机器(它有自己的IP地址和自己的网络接口),因此无法访问boot2docker客人。

最简单的解决方法是进行端口转发。boot2docker的说明建议采用以下方式

boot2docker ssh -L 49155:localhost:49155

这会导致您主机上的49155端口(当前无操作)将所有连接转发到boot2docker客户端的49155端口。
现在,从iOS模拟器中,您可以像在主机上一样访问服务器:0.0.0.0:49155。如果使用物理iOS设备,则需要获取Mac的外部IP地址并使用该地址。
除了像这样进行端口转发之外,还可以使用Vagrant自己设置一个VM(运行boot2docker、CoreOS或任何最新的Linux),并使该VM使用“桥接”网络(使客户端可从主机外部访问)。

非常感谢您详尽的回答!实际上,我所做的正是您所说的那样(但没有这种清晰的理解),所以我使用了SquidMan工具来“公开”boot2docker(+容器内的docker)到本地网络。然后在设备上设置HTTP代理,它运行得相当不错。不幸的是,iOS模拟器不允许我在其用户界面中设置HTTP代理,因此我将尝试您的建议! - Michal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接