2015-01-26 7 views
6

Ich verwende boot2docker, um Docker-Images auszuführen. Ich weiß sehr gut, dass ich auf die IP-Adresse von boot2docker zugreifen muss, um auf den Docker-Container zugreifen zu können.Zugriff auf den Andock-Container über den iOS-Simulator

Grundsätzlich in Terminal es curl $(boot2docker ip):49155

ist, wenn ich es auf diese Weise in Chrome oder Safari zu tun, scheint alles in Ordnung. Wenn ich die Adresse in Safari-Browser in iOS Simulator (iOS 8) eingeben, erhalte ich eine Nachricht: Safari kann die Seite nicht öffnen, weil die Netzwerkverbindung verloren wurde.

Ich habe versucht, einige andere localhost-ish App - SimpleHTTPServer in Python, über 0.0.0.0:4000 zugänglich zu machen und das scheint gut zu funktionieren (Website lädt im iOS-Simulator).

Ist das ein Fehler in Docker/iOS Simulator oder muss ich noch etwas einrichten?

Antwort

5

boot2docker ist eine VM, die auf Ihrem Computer ausgeführt wird. Ihr Mac ist der "Host" und der Boot2docker-Rechner ist der "Gast". Der iOS-Simulator ist auch ein "Gast".

Die Gastsysteme können ihren Netzwerkzugriff auf verschiedene Arten erhalten. boot2docker ist eingerichtet, um NAT zu verwenden, was bedeutet, dass Sie von den Gast zu überall erhalten können, aber Sie zu den Gast nur von Ihrem Host-Computer erhalten können. Der iOS-Simulator ist nicht der Host-Computer (er verfügt über eine eigene IP-Adresse und eine eigene Netzwerkschnittstelle), sodass er den boot2docker-Gast nicht erreichen kann.

Am einfachsten ist die Portweiterleitung. boot2docker's instructions vorschlägt etwas wie

boot2docker ssh -L 49155:localhost:49155 

Dies bewirkt, dass Port 49155 auf dem Host-Computer (derzeit nichts zu tun), um alle Verbindungen zu Port 49155 auf dem boot2docker Gast zu übermitteln.

Jetzt können Sie vom iOS-Simulator aus Ihren Server erreichen, als wäre er auf dem Host: 0.0.0.0:49155. Wenn Sie ein physisches iOS-Gerät verwenden, müssen Sie die nach außen gerichtete IP-Adresse für Ihren Mac ermitteln und diese verwenden. Eine Alternative zur Port-Weiterleitung wäre, Vagrant zu verwenden, um selbst eine VM einzurichten (boot2docker oder CoreOS oder ein beliebiges aktuelles Linux) und diese VM "überbrückte" Netzwerke zu benutzen (was den Gast von außerhalb zugänglich macht) Gastgeber).

+0

Vielen Dank für die gründliche Antwort! Was ich getan habe, als ich etwas erwartet habe, was Sie gesagt haben (aber ohne dieses klare Verständnis), stattdessen habe ich das Tool SquidMan verwendet, um boot2docker (+ den Docker Container innerhalb) dem lokalen Netzwerk "auszusetzen". Dann auf dem Gerät habe ich HTTP-Proxy eingestellt und es funktioniert ganz gut. Leider erlaubt mir der iOS-Simulator nicht, in der Benutzeroberfläche den HTTP-Proxy festzulegen, also probiere ich stattdessen Ihren Vorschlag! – Michal