webentwicklung-frage-antwort-db.com.de

Docker für Mac VM IP

Ich habe gerade zu Docker for Mac migriert, vorher Docker Toolbox mit Virtualbox für OSX.

Ich habe die IP-Adresse des Computers mit $(docker-machine ip default) abgerufen.

Gibt es einen zuverlässigen Weg, um die Hyperkit-IP-Adresse zu erhalten?

Vielen Dank!

12
mac

Sie müssen nicht direkt mit der IP-Adresse der xhyve VM arbeiten, wie Sie es mit docker-machine tun würden. Alle Portzuordnungen werden direkt localhost zugeordnet.

$ docker run -d -p 8080:80 nginx:latest
$ curl localhost:8080

Siehe auch die offizielle Dokumentation :

Wenn Sie einen Container mit dem Argument -p ausführen, beispielsweise: $ docker run -p 80:80 -d nginx Docker für Mac macht den Containerport unter localhost verfügbar.

7
helmbert

Im Gegensatz zu Docker Toolbox vermitteln Docker für Windows und Docker für Mac das Gefühl, dass Docker direkt auf Ihrem Betriebssystem ausgeführt wird, so dass sie eine virtuelle Umgebung verwenden Maschinen, die unter einfachen Hypervisoren (anstelle von VirtualBox) ausgeführt werden und direkt von der ausführbaren Datei docker verarbeitet werden.
Daher werden sie mit docker-machine nicht angezeigt und es wird keine andere IP-Adresse als localhost angezeigt. 

Docker für Windows basiert auf dem Hypervisor HyperV, der eine Netzwerkverbindung zu tcp://localhost:2375 zulässt.

Docker für Mac basiert auf dem Hypervisor xhyve. Die Art und Weise, wie sie implementiert wird, stellt nur eine Verbindung über den Socket unix:///var/run/docker.sock bereit.

Workaround

So stellen Sie eine TCP Verbindung für Docker für Mac bereit:

  1. Installieren Sie socat. Mit brew:

    brew install socat

  2. Führen Sie diesen Befehl socat aus, um TCP -Anfragen an den Socket weiterzuleiten

    socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock

  3. Planen Sie, was Sie wollen tcp://localhost:2375

Sie müssen gegebenenfalls den Befehl socat beim Start ausführen.

Dies war zum Beispiel für mich nützlich, um den Webstorm nodeJS-Debugger einem nodeJS -Container zuzuordnen (da zum Zeitpunkt des Schreibens Docker-Debugging von Webstorm Docker-Integrationsplugin unterstützt wird. , aber nicht durch Unix-Sockets).

Dokumentation zu Docker für Mac-Einschränkungen

https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds

Auf macOS gibt es keine Docker0-Bridge

Aufgrund der Art und Weise, wie Netzwerke in Docker für Mac implementiert werden, wird in macOS keine Docker0-Schnittstelle angezeigt. Diese Schnittstelle befindet sich tatsächlich in HyperKit.

20
arvymetal

Sie können das Docker-Image für socat verwenden, das bei jedem Start von 'docker for mac' startet.

docker-Run -d --restart = immer -p 2376: 2375 -v /var/run/docker.sock:/var/run/docker.sock bobrik/socat TCP4-LISTEN: 2375, Gabel, reuseaddr UNIX-CONNECT: /var/run/docker.sock

Finden Sie Ihre Docker-API-IP-Adresse:

ifconfig | grep 'inet 192'| awk '{ print $2}'
6
jaanus

Meine derzeitige Lösung besteht darin, die Container mit Docker Machine (A linux VM, die unter einer anderen IP-Adresse verfügbar ist) zu erstellen und den gesamten Datenverkehr der Container an die Docker Machine-VM weiterzuleiten.

Sudo route -n add -net 172.18.0.0/16 192.168.99.100

Sie können den Netzwerkbereich Ihrer Docker-Container mit docker inspect und die IP-Adresse Ihres Docker-Computers VM mit docker-machine ip abrufen.

1

Eine andere Problemumgehung besteht in der Verwendung von Sudo ifconfig lo0 alias 172.17.0.1, sodass Sie immer noch dieselbe statische IP-Adresse verwenden können (wenn Ihre Linux-basierten Kollegen oder Bash-Skripts darauf bestehen, diese zu verwenden).

0
user3330513