从 iOS 模拟器访问 docker 容器

Accessing docker container from iOS Simulator

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

基本上在终端是curl $(boot2docker ip):49155

当我在 Chrome 或 Safari 中这样做时,一切似乎都很好。当我在 iOS Simulator (iOS 8) 的 Safari 浏览器中输入地址时,我收到消息:Safari 无法打开页面,因为网络连接丢失

我尝试 运行 一些其他类似本地主机的应用程序 - Python 中的 SimpleHTTPServer,可通过 0.0.0.0:4000 访问,这似乎工作正常(网站加载iOS 模拟器)。

这是 Docker/iOS 模拟器中的错误还是我必须进行一些额外的设置?

boot2docker 是您机器上的虚拟机 运行。你的 Mac 是 "host" 而 boot2docker 机器是 "guest"。 iOS 模拟器也是一个 "guest".

来宾计算机可以通过多种方式访问​​网络。 boot2docker 设置为使用 NAT,这实际上意味着您可以从 guest 任何地方获取 to,但您只能获取 to 从你的主机上来宾。 iOS 模拟器不是主机(它有自己的 IP 地址和自己的网络接口)所以它无法连接到 boot2docker 来宾。

最简单的解决方法是进行端口转发。 boot2docker's instructions 建议

boot2docker ssh -L 49155:localhost:49155

这会导致主机上的端口 49155(当前什么都不做)将所有连接转发到 boot2docker 来宾上的端口 49155。

现在,您可以从 iOS 模拟器访问您的服务器,就好像它在主机上一样:0.0.0.0:49155。如果您使用物理 iOS 设备,则需要为您的 Mac 获取面向外部的 IP 地址并使用它。

像这样的端口转发的替代方法是使用 Vagrant 自己设置一个 VM(运行 boot2docker 或 CoreOS 或任何最近的 Linux)并让该 VM 使用 "bridged" 网络(使来宾可以从主机外部访问)。