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!
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
.
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
.
Pour fournir une connexion TCP à Docker for Mac:
Installez socat. Avec brew:
brew install socat
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
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).
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.
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}'
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
.
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).