2016-02-12 7 views
10

Es gibt bestimmte Funktionen, wie JavaScript-Service-Arbeiter ohne https, die nur auf localhost funktionieren, aber wenn ich meine App in einem Andock-Container mit docker-compose ausführen, die oben läuft gibt es von docker-Maschine, ich brauche vonVerbinden mit docker-machine mit 'localhost'

docker-machine ip default 

mit der Adresse, die ich eine Möglichkeit, dass die IP-kartieren localhost bekommen, um es zu verbinden?

+0

Ich bin nicht vertraut mit 'JavaScript Beschäftigter aber ich denke, diese laufen auf Ihrem Browser, nicht die localhost –

+0

Ja, es läuft in Ihrem Browser. Aber wenn Sie es auf einem Server mit einem anderen Hostnamen als "localhost" ausführen, muss die Seite über https bedient werden, damit sie funktioniert. – bigblind

+0

was ist, wenn Sie Ihre 'hosts' Datei in Ihrem lokalen Rechner bearbeiten und den' Port80' auf dem Docker Host zuordnen –

Antwort

22

Sie können einen VirtualBox-Port weiterleiten, um einen Port auf dem Docker-Host Ihrem lokalen Computer zuzuordnen.

Ihre Docker Maschine Unter der Annahme, "default" genannt, und Sie wollen Port 80 in Ihrem Container zu localhost zur Karte: 8888 Sie können laufen:

vboxmanage modifyvm default --natpf1 "nameformapping,tcp,,8888,,80" 

oder wenn die VM läuft

vboxmanage controlvm default natpf1 "nameformapping,tcp,,8888,,80" 

Dies kann auch in der Benutzeroberfläche der VirtualBox in den Einstellungen für die VM erfolgen. Hier ist das Dokument von VirtualBox https://www.virtualbox.org/manual/ch06.html#network_nat

Sie müssen auch den Port auf Ihrem Container auf den Port auf der Docker-Maschine zuordnen, tun Sie das, wenn Sie den Container starten (dies setzt auch voraus, dass Sie ein "EXPOSE 80 "Befehl in der Dockerfile

docker run -p 80:80 mycontainer 

https://docs.docker.com/engine/reference/run/

siehe auch: https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

+0

Gute Antwort. Normalerweise habe ich die Reihenfolge der Abbildungen in umgekehrter Reihenfolge gesehen. Sie ordnen localhost: 8888 to vm: 80 und port 80 auf Ihrer Dockermaschine Port 80 im Container zu, so wie die Pakete fließen. – Matt

+0

'natpfN' ist keine Flagge, es ist ein Positionsargument. Der Befehl sollte "vboxmanage controlvm default natpf1" nameformapping, tcp ,, 8888,, 80 "' –

+0

Guter Fang, es ist eine Flagge für modifyvm, aber nicht controlvm ... sehr verwirrend. Ich aktualisierte die Antwort, um beide Optionen zu zeigen –

13

Bearbeiten Ihrer hosts Datei führt dazu, dass Ihre lokale Maschine aussieht nur direkt an die für eine Domain angegebene IP-Adresse. So könnten Sie die IP-Adresse docker-machine der etc\hosts Datei in Ihrem lokalen Computer hinzufügen und den Port 80 auf Ihrem Container dem Port 80 auf dem docker-machine zuordnen.

Beispiel:

1) IP-Adresse Docker Host

$ docker-machine ip default 
192.168.99.100 

2) Fügen Sie diese Zeile zu etc/hosts Datei in Ihrem lokalen Rechner

192.168.99.100 domain.com 

3) Überprüfen Sie, ob Ihre Maschine erhalten, ist, Auflösung der Domain

$ ping domain.com 
PING domain.com (192.168.99.100): 56 data bytes 
64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.294 ms 
64 bytes from 192.168.99.100: icmp_seq=1 ttl=64 time=0.437 ms 
64 bytes from 192.168.99.100: icmp_seq=2 ttl=64 time=0.556 ms 
64 bytes from 192.168.99.100: icmp_seq=3 ttl=64 time=0.270 ms 

Hinweise:

  • Für Windows-Benutzer die Host-Datei auf C:\Windows\System32\Drivers\etc\hosts
  • localted ist, wenn mehrere Domains in nur einer einzigen Docker-Maschine unterstützen möchten, können Sie einen Proxy-Container erstellen mit nginx innen vor den anderen Containern.
1

Der einfachste Weg ist die Portweiterleitung von der VBox

Einstellungen-> Network-> Adapter 1-> Port Forwarding

fügen Sie dann Name in Host 127.0.0.1 hinzufügen (für die lokale zu machen Host) dann richtige Port-Bindungen und starten Sie die VM neu.

enter image description here