web-dev-qa-db-fra.com

Docker pour Mac VM IP

Je viens de migrer vers Docker pour Mac, après avoir précédemment utilisé Docker Toolbox avec virtualbox pour OSX.

J'avais l'habitude d'obtenir l'adresse IP de la machine avec $(docker-machine ip default).

Existe-t-il un moyen fiable d'obtenir l'adresse IP d'Hyperkit?

Merci!

12
mac

Il n'est pas nécessaire de travailler directement avec l'adresse IP de la machine virtuelle xhyve, comme vous le feriez avec docker-machine. Tous les mappages de ports sont directement mappés sur localhost.

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

Voir aussi la documentation officielle :

Lorsque vous exécutez un conteneur avec l'argument -p, par exemple: $ docker run -p 80:80 -d nginx, Docker for Mac rendra le port du conteneur disponible à localhost.

7
helmbert

Contrairement à la boîte à outils Docker, Docker pour Windows et Docker pour Mac sont conçus pour vous donner le sentiment que Docker s'exécute directement sur votre système d'exploitation. les machines fonctionnant sous hyperviseurs légers (au lieu de VirtualBox) gérées directement par l'exécutable docker.
Par conséquent, vous ne les verrez pas avec docker-machine et vous ne verrez aucune autre adresse IP que localhost

Docker pour Windows repose sur l'hyperviseur HyperV qui permet une connexion réseau à tcp://localhost:2375.

Docker for Mac s'appuie sur l'hyperviseur xhyve, car sa mise en œuvre ne permet une connexion qu'à travers le socket unix:///var/run/docker.sock.

Workaround

Pour fournir une connexion TCP à Docker for Mac:

  1. Installez socat. Avec brew:

    brew install socat

  2. Exécutez cette commande socat pour transférer les requêtes TCP au socket.

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

  3. Mappez ce que vous voulez sur tcp://localhost:2375

A vous de lancer la commande socat au démarrage, si nécessaire.

Cela m’a par exemple été utile d’associer le débogueur Webstorm nodeJS à un conteneur nodeJS (puisqu’au moment de l’écriture, docker debugging est pris en charge par Webstorm docker integration , mais pas par les sockets unix).

Documentation sur les limitations de Docker for Mac

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

Il n'y a pas de pont docker0 sur macOS

En raison de la manière dont la mise en réseau est mise en œuvre dans Docker pour Mac, vous ne pouvez pas voir une interface docker0 dans macOS. Cette interface est en fait dans HyperKit.

20
arvymetal

Vous pouvez utiliser l’image de docker pour socat qui commence chaque fois que vous démarrez 'docker pour mac'

docker run -d --restart = toujours -p 2376: 2375 -v /var/run/docker.sock:/var/run/docker.sock bobrik/socat TCP4-LISTEN: 2375, fork, tours de lecture UNIX-CONNECT: /var/run/docker.sock

Trouvez votre adresse IP d'API docker:

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

Ma solution actuelle consiste à créer les conteneurs à l'aide de Docker Machine (un linux VM disponible sous une autre adresse IP) et à acheminer tout le trafic des conteneurs vers la machine virtuelle de docker.

Sudo route -n add -net 172.18.0.0/16 192.168.99.100

Vous pouvez obtenir la plage de réseau de vos conteneurs de menu fixe à l'aide de docker inspect et l'adresse IP de votre ordinateur de poche VM à l'aide de docker-machine ip.

1

Une autre solution consiste à utiliser Sudo ifconfig lo0 alias 172.17.0.1 afin que vous puissiez toujours utiliser la même adresse IP statique (si vos collègues Linux ou vos scripts bash insistent pour l'utiliser).

0
user3330513