Moby: Pas de docker0 sur Docker pour Mac?

Créé le 16 mai 2016  ·  115Commentaires  ·  Source: moby/moby

Sortie de docker version :

Client:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Wed Apr 27 00:34:20 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   8b63c77
 Built:        Tue May 10 10:39:20 2016
 OS/Arch:      linux/amd64

Sortie de docker info :

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 21
Server Version: 1.11.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 25
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: null host bridge
Kernel Version: 4.4.9-moby
Operating System: Alpine Linux v3.3
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.954 GiB
Name: moby
ID: DFWG:ZZBI:QGZP:CAFF:PZVX:WLED:3XNK:J2LK:UV3V:X2JR:VCGJ:QFBK
Docker Root Dir: /var/lib/docker
Debug mode (client): false
Debug mode (server): true
 File Descriptors: 17
 Goroutines: 38
 System Time: 2016-05-15T23:53:58.530098977Z
 EventsListeners: 1
Registry: https://index.docker.io/v1/

Détails supplémentaires sur l'environnement (AWS, VirtualBox, physique, etc.):

Étapes pour reproduire le problème:
1.
2.
3.

Décrivez les résultats que vous avez reçus:
Pas de docker0 et absolument aucun moyen de se connecter aux services exécutés sur l'hôte docker via une passerelle de pont.
J'ai tout essayé et j'ai pensé que je devenais fou, puis j'ai essayé exactement les mêmes choses sur mon hôte ubuntu sans aucun problème

Décrivez les résultats attendus:
Je souhaite pouvoir me connecter à mes redis locaux et à d'autres services sans avoir à les dockeriser ...

kinquestion platfordesktop versio1.11

Commentaire le plus utile

Pas vraiment satisfaisant car les macs ne sont généralement pas des serveurs de production mais
machines de développement.

Sur mes machines de production, le problème de ne pas pouvoir
connectez-vous à l'hôte.

Mais sur une machine de développement se connectant aux services sur le même hôte depuis un
conteneur est exactement le scénario où cette fonctionnalité est souhaitée
plus.

Tous les 115 commentaires

avez-vous trouvé ip dans virtualbox ou sur l'hôte?

Je pense que docker0 était sur la VM virtualbox.

Je parle de docker pour mac qui est en version bêta et ne fait pas son travail via un vm

Je suis également confronté exactement au même problème. Adresse IP de l'hôte trouvée sur la machine docker à l'aide de la commande ci-dessous. En supposant que 0.0.0.0 représente l'hôte, corrigez-moi si je me trompe ici.
netstat -nr | grep '^ 0.0.0.0' | awk '{print $ 2}'
172.17.0.1

mais quand faire curl sur cette IP avec un port où je cours un serveur Web il donne la connexion refusée.
curl 172.17.0.1:9000
curl: (7) Échec de la connexion au port 172.17.0.1 9000: Connexion refusée

Je ne sais pas comment obtenir une solution appropriée. Cela semble poser des problèmes car il est nécessaire de se connecter au service qui fonctionnera sur la machine hôte.
Nous avons également trouvé un moyen de corriger l'adresse IP de la machine hôte en la définissant dans DOCKER_OPTS.
DOCKER_OPTS = "- H tcp: //0.0.0.0 : 5000 -H unix: ///var/run/docker.sock --bip = 172.17.42.1 / 16"

mais où puis-je mettre ces options sur mac? sur ubuntu, il peut être placé dans / etc / default / docker.

Veuillez fournir des instructions si cela peut être corrigé sur Mac.

ping @justincormack vous avez peut-être quelques indices ici.

@MiteshSharma exactement, c'est l'une des premières choses que j'ai essayées aussi et avec exactement les mêmes problèmes

@NinoFloris On dirait que nous sommes tous les deux exactement au même endroit. Dans mon cas, j'exécute mysql sur ma machine hôte.
Salut les gars,
Faites une mise à jour si quelqu'un est capable de le faire.

J'ai utilisé ça
https://docs.docker.com/engine/installation/mac/

Je ne sais pas si votre version bêta est spéciale

@HackToday c'est différent, c'est l'installation Mac basée sur VirtualBox; Docker pour Mac est sur beta.docker.com

Merci @thaJeztah Un bon lien doc possible pour l'architecture Mac Docker ou autre chose? Semble intéressant

@HackToday https://blog.docker.com/2016/03/docker-for-mac-windows-beta/ en donne un peu plus, et il y a de la documentation, mais je pense que c'est seulement si vous êtes en version bêta; https://beta.docker.com/docs/. Si vous vous inscrivez à la version bêta, donnez-moi un "ping"; Je peux essayer de vous mettre sur la liste des priorités en tant que contributeur: sourire:

oh @thaJeztah Merci, je pensais que c'était gratuit de travailler et d'essayer. Pas besoin de spécial pour contribuer. Je vais d'abord lire ce blog pour comprendre avant d'essayer. 😺

@HackToday c'est totalement gratuit, juste pour ne pas submerger l'équipe, il a été décidé de le publier d'abord en version bêta "privée", car "beaucoup d'utilisateurs ===" beaucoup de questions de support ": sourire:

Salut, oui, il n'y a actuellement aucun moyen de router du Mac vers le pont docker0 . Nous pourrons peut-être l'ajouter plus tard, mais généralement, nous vous recommandons de vous connecter à partir d'un conteneur ou en exposant des ports. C'est la même chose que pour les réseaux de superposition docker ainsi que sur Linux, auxquels vous ne pouvez pas vous connecter à partir de l'hôte.

Pas vraiment satisfaisant car les macs ne sont généralement pas des serveurs de production mais
machines de développement.

Sur mes machines de production, le problème de ne pas pouvoir
connectez-vous à l'hôte.

Mais sur une machine de développement se connectant aux services sur le même hôte depuis un
conteneur est exactement le scénario où cette fonctionnalité est souhaitée
plus.

J'ai également besoin de cette interface docker0 pour une utilisation dans l'environnement mixte "docker + sur l'hôte (de l'IDE) exécutant des applications".

La meilleure solution actuelle est de se connecter à vos conteneurs depuis un autre conteneur. À l'heure actuelle, nous ne pouvons pas fournir de routage vers ces conteneurs en raison de problèmes avec OSX qu'Apple n'a pas encore résolus. nous suivons cette exigence, mais nous ne pouvons rien y faire pour le moment.

Le commentaire ci-dessus est-il exact?

J'ai trouvé que, à partir des conteneurs docker-for-mac-beta, l'hôte docker pouvait être trouvé et connecté à l'adresse habituelle 172.17.0.1 (en supposant que le service soit lié à 0.0.0.0 ).

@igrayson C'est parce que les conteneurs sont dans la VM avec le démon docker et peuvent certainement y accéder.
Le problème est le routage d'OSX vers le réseau VM.

Le problème est le routage d'OSX vers le réseau VM.

Ce n'est pas ma compréhension du problème OP:

Je souhaite pouvoir me connecter à mes redis locaux et à d'autres services sans avoir à les dockeriser ...

J'exécute docker-for-mac-beta et je n'ai aucun problème à me connecter à redis et à d'autres services locaux - fonctionnant sous OSX - en leur faisant écouter sur 0.0.0.0 , et en faisant connecter mes applications dockerized à 172.17.0.1 .

Aperçu

J'ai le même problème. Utilisation de la version Docker 1.11.1-beta14 (build: 8670) 984649fbd63d53a62b34f08b59694d4d569b74d5 . Mon pinata doctor dit que tout va bien.

Je ne peux pas curl un service fonctionnant dans l'hôte, par exemple une application ExpressJS écoutant dans le port 3001 , depuis l'intérieur du conteneur:

root<strong i="11">@e19fc8e02595</strong>:/# curl localhost:3001
curl: (7) Failed to connect to localhost port 3001: Connection refused

root<strong i="12">@e19fc8e02595</strong>:/# curl 0.0.0.0:3001
curl: (7) Failed to connect to 0.0.0.0 port 3001: Connection refused

root<strong i="13">@e19fc8e02595</strong>:/# curl 172.25.8.25:3001
{"status":200} 
root<strong i="14">@e19fc8e02595</strong>:/#

_Remarque: 172.25.8.25 est mon IP WiFi._

Pinata

$pinata list
These are advanced configuration settings to customize Docker.app on MacOSX.
You can set them via pinata set <key> <value> <options>.

🐳  hostname = docker
   Hostname of the virtual machine endpoint, where container ports will be
   exposed if using nat networking. Access it via 'docker.local'.

🐳  hypervisor = native (memory=4, ncpu=6)
   The Docker.app includes embedded hypervisors that run the virtual machines
   that power the containers. This setting allows you to control which the
   default one used for Linux is.

 ▸  native: a version of the xhyve hypervisor that uses the MacOSX
              Hypervisor.framework to run container VMs. Parameters:
              memory (VM memory in gigabytes), ncpu (vCPUs)


🐳  network = hostnet (docker-ipv4=192.168.65.2, host-ipv4=192.168.65.1)
   Controls how local containers can access the external network via the
   MacOS X host. This includes outbound traffic as well as publishing ports
   for external access to the local containers.

 ▸ hostnet: a mode that helps if you are using a VPN that restricts
              connectivity. Activating this mode will proxy container network
              packets via the Docker.app process as host socket traffic.
              Parameters: docker-ipv4 (docker node), host-ipv4 (host node)
 ▸     nat: a mode that uses the MacOS X vmnet.framework to route container
              traffic to the host network via a NAT.

🐳  filesystem = osxfs
   Controls the mode by which files from the MacOS X host and the container
   filesystem are shared with each other.

 ▸   osxfs: a FUSE-based filesystem that bidirectionally forwards OSX
              filesystem events into the container.


🐳  native/port-forwarding = true
   Expose container ports on the Mac, rather than the VM

 ▸    true: Container ports will be exposed on the Mac
 ▸   false: Container ports will be exposed on the VM

🐳  daemon = run 'pinata get daemon' or 'pinata set daemon [@file|-]>
   JSON configuration of the local Docker daemon. Configure any custom
   options you need as documented in:
   https://docs.docker.com/engine/reference/commandline/daemon/. Set it
   directly, or a <strong i="20">@file</strong> or - for stdin.

Doubles possibles, références, aide, etc.

J'ai eu des problèmes similaires et j'ai trouvé 172. * ips ne me permettait pas de me connecter à une instance mysql locale liée à 0.0.0.0.

Je pourrais me connecter avec n'importe quelle adresse IP routable depuis ma machine hôte. ifconfig et trouvez-en un.

Maintenant, comment puis-je obtenir cela dynamiquement dans le conteneur?

Avoir le même problème que @Kazanz (mysql s'exécutant localement / non contenu) en essayant 172.17.0.1. Alors je suppose que je vais essayer la boîte à outils Docker? Il serait utile que cette contrainte soit documentée. Je n'ai rien trouvé à ce sujet avant de tomber sur ce problème.

Ping @londoncalling ^^

Des nouvelles de celui-ci? car dans Ubuntu (hôte) l'application à l'intérieur du conteneur qui écoute sur 0.0.0.0 peut être contactée par l'hôte en utilisant IP 172.17.*.*. . Donc pas besoin d'exposer le port lors de l'exécution du conteneur.

Sur Docker pour Mac Beta, je ne peux pas faire cela car l'absence de docker0. J'espère que cela sera corrigé lors de la version finale :)

@thaJeztah @astasoft Je vais l'examiner aujourd'hui, merci @

Je crois comprendre que votre problème est d'accéder aux services exécutés sur votre Mac à partir d'un conteneur.
Si tel est le cas, vous pouvez le faire en utilisant l'adresse IP exposée par l'interface en0.
ifconfig en0 | grep "inet" | couper -d "" -f2

Par exemple, si j'ai un serveur Web en cours d'exécution sur mon Mac sur le port 80:
docker run -it tutum / curl curl ifconfig en0 | grep "inet " | cut -d " " -f2

Ça marche!

Vous pouvez définir cette adresse IP dans une variable d'environnement et la transmettre à votre conteneur, comme je le fais pour le serveur X11 dans https://github.com/chanezon/docker-tips/blob/master/x11/README.md

@chanezon J'ai pu faire fonctionner cela, mais cela semble auquel vous êtes connecté. J'espérais définir une adresse IP plus ou moins statique représentant mon pont docker local.

@londoncalling Merci,

@chanezon Non, mon cas accède au service de l'hôte au conteneur. Il y a un cas où je veux exécuter le serveur Web dans mon hôte sur le port 80 et le même port dans mon conteneur. Si j'expose le port de conteneur 80 à l'hôte, je ne pourrai pas exécuter le serveur Web sur ma machine hôte. Ce type de configuration est très important pour mon développement.

Ma solution de contournement actuelle consiste à revenir à Docker Toolbox pour Mac et à effectuer le transfert de port sur l'instance Boot2Docker sur Virtualbox.

sudo iptables -t nat -A PREROUTING -d 192.168.99.100/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80

Ensuite, je peux appeler le service dans le conteneur en utilisant l'IP 192.168.99.100:80 de boot2docker.

curl -i http://192.168.99.100

Donc, j'ai le problème suivant qui pourrait être lié à cela.
Juste pour être clair, j'utilise Docker Beta for Mac 1.12.0-beta21 (build: 10868) .

Fondamentalement, je ne peux pas me connecter de l'hôte au conteneur en utilisant l'adresse IP 172.17.0.2 , car il n'y a pas d'interface docker0 avec l'adresse 172.17.0.1 attribuée.

Le conteneur est une image ubuntu et voici les informations pertinentes sur le réseau

root<strong i="12">@app</strong>:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02
          inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:524 errors:0 dropped:0 overruns:0 frame:0
          TX packets:370 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:217502 (217.5 KB)  TX bytes:40451 (40.4 KB)

root<strong i="13">@app</strong>:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 eth0

L'hôte est un MacbookPro et, comme vous pouvez le voir dans l'extrait suivant, il n'a pas de docker0 (ni aucune interface à ce sujet) avec une adresse IP 172.17.0.1 , qui est attribuée dans le conteneur comme la passerelle.

robert<strong i="19">@localhost</strong> $ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 ::1 prefixlen 128
    inet 127.0.0.1 netmask 0xff000000
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
    nd6 options=1<PERFORMNUD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8823<UP,BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 1500
    ether f4:5c:89:c9:be:0d
    nd6 options=1<PERFORMNUD>
    media: autoselect (<unknown type>)
    status: inactive
en1: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
    options=60<TSO4,TSO6>
    ether 6a:00:02:06:b7:f0
    media: autoselect <full-duplex>
    status: inactive
en2: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
    options=60<TSO4,TSO6>
    ether 6a:00:02:06:b7:f1
    media: autoselect <full-duplex>
    status: inactive
p2p0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 2304
    ether 06:5c:89:c9:be:0d
    media: autoselect
    status: inactive
awdl0: flags=8902<BROADCAST,PROMISC,SIMPLEX,MULTICAST> mtu 1484
    ether 0e:f1:f1:4d:46:88
    nd6 options=1<PERFORMNUD>
    media: autoselect
    status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether f6:5c:89:9c:e6:00
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x2
    member: en1 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 5 priority 0 path cost 0
    member: en2 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 6 priority 0 path cost 0
    nd6 options=1<PERFORMNUD>
    media: <unknown type>
    status: inactive
en4: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>
    ether 39:c9:87:45:22:ee
    inet6 fe80::3ac9:86ff:fe40:22de%en4 prefixlen 64 scopeid 0x9
    inet 192.168.1.123 netmask 0xffffff00 broadcast 192.168.1.255
    nd6 options=1<PERFORMNUD>
    media: autoselect (1000baseT <full-duplex,flow-control>)
    status: active

Certains collègues ont cela fonctionne correctement sur les hôtes Ubuntus, donc je suppose qu'il s'agit d'un problème Mac ou d'un environnement local.
Une idée?

@robertoestivill n'est pas sûr du cas d'utilisation exact, mais si ce conteneur a publié un port, vous pouvez y accéder via localhost:port

@nikdavis si vous voulez une adresse IP stable, vous pouvez ajouter une adresse IP (vers laquelle vous ne serez jamais acheminé) à l'interface de bouclage lo0 du Mac et l'utiliser.

Salut, à mon humble avis, c'est une grande différence par rapport à Docker sur Linux. Il existe de nombreux documents qui ne s'appliquent tout simplement pas. Je ne connais pas assez le réseau pour savoir comment attacher une autre adresse IP à lo0 et puis quoi. Il serait vraiment utile d'avoir une description des solutions de contournement (qui n'impliquent pas boot2docker) pour ce problème et de le mentionner dans la documentation.

@justincormack @chanezon pouvons-nous travailler ensemble pour obtenir de bons documents sur ce problème?

@ pourquoi42
Vous pouvez ajouter une autre adresse IP à l'interface lo0 comme suit:
CONTAINER_IP = $ (docker inspect --format '{{.NetworkSettings.IPAddress}}' nom-conteneur)
ifconfig lo0 alias $ CONTAINER_IP

Pour le supprimer:
ifconfig lo0 -alias $ CONTAINER_IP

@itilk ne semble pas fonctionner sur les MacO. Essayé avec les names et container id .

robert<strong i="9">@work</strong>:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
d047790e196a        group/name              "/bin/bash"         About a minute ago   Up About a minute                       jovial_goodall

robert<strong i="10">@work</strong>:~ $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' jovial_goodall

robert<strong i="11">@work</strong>:~ $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' d047790e196a

robert<strong i="12">@work</strong>:~ $

J'avais Docker 1.12.0 (build 10871) fonctionnant sur Darwin,
1) Tout le conteneur docker fonctionne très bien;
2) Le conteneur peut communiquer avec l' hôte ;
3) La communication entre les conteneurs fonctionne bien;

Où est l'interface virtuelle docker0 ? OU il existe un moyen de laisser l' hôte se connecter aux conteneurs?

triste de lire ceci: Limitations connues sur OSX

Known Limitations
There is no docker0 bridge on OSX
Because of the way networking is implemented in Docker for Mac, you cannot see a docker0 interface in OSX. This interface is actually within HyperKit.

I can’t ping my containers
Unfortunately, due to limtations in OSX, we’re unable to route traffic to containers, and from containers back to the host.

Donc pour l'instant, nous n'avons qu'une seule façon de connecter l' hôte au conteneur : le mappage de ports

Version 1.12.0-beta21 (build: 11019)
1) Tout le conteneur docker fonctionne très bien.
2) Le conteneur ne peut pas communiquer avec l'hôte.
3) La communication entre les conteneurs fonctionne très bien.
4) docker0 non disponible.

Ad.2)

J'ai une instance hugo qui se lie à 0.0.0.0 sur le port 1313 . curl depuis le conteneur en cours d'exécution renvoie: curl: (7) Failed to connect to 172.19.0.1 port 1313: Connection refused .
L'utilisation de l'adresse IP renvoyée par ifconfig en0 | grep "inet " | cut -d " " -f2 ne fonctionne pas non plus:
curl: (7) Failed to connect to 172.19.27.228 port 1313: No route to host .

Salut à tous,

J'ai trouvé un article d'un autre produit conteneur ( pas de docker ): https://www.flockport.com/using-flockbox-with-xhyve/ , et je ne l'ai même pas testé si cela fonctionne effectivement.

à la fin, il mentionne:

Vous pouvez également utiliser le routage au lieu du transfert de port décrit ci-dessus pour accéder aux applications dans des conteneurs. Le routage rendra l'ensemble du sous-réseau du conteneur à l'intérieur de la machine virtuelle disponible sur l'hôte.

Si vous préférez utiliser le routage au lieu de la redirection de port, voici comment cela fonctionne. Les commandes de routage doivent être exécutées sur l'hôte.

Si l'adresse IP de votre VM est 192.168.64.3 et le sous-réseau du conteneur est 10.0.3.0/24, vous pouvez créer une route avec une commande comme ci-dessous

sudo route -n add 10.0.3.0/24 192.168.64.3

Xyhve crée automatiquement une interface bridge100 pour la mise en réseau des VM. Exécutez un rapide ifconfig pour vérifier que l'interface bridge100 est activée, par exemple en4, puis exécutez la commande ci-dessous.

sudo ifconfig bridge100 -hostfilter en4

Vous devriez maintenant pouvoir envoyer un ping à n'importe quel conteneur à l'intérieur de la machine virtuelle directement à partir de l'hôte

ping 10.0.3.175

Pour accéder à l'application sur votre navigateur Hosts, modifiez le fichier / etc / hosts sur l'hôte comme décrit ci-dessus avec la redirection de port, mais cette fois, associez l'adresse IP du conteneur à l'URL de l'application.

Désolé que je connaisse à nu les trucs de réseautage Linux, mais est-ce une solution de contournement?

Je ne sais pas comment obtenir l'adresse IP du vm (alpin avec docker) fonctionnant dans xhyve, des idées?

Salut @Kaijun , je n'avais pas installé Docker Machine, et d'où vient ton bridge100?

@junjiemars non, l'article que j'ai posté n'est pas lié à docker, c'est juste un autre produit de conteneur qui fonctionne fondamentalement dans la même approche avec docker. (Hôte -> VM (xhyve) -> Conteneurs)

J'ai pensé que si nous pouvions nous inspirer de cet article ou de ce produit et appliquer la même solution de contournement pour docker lui-même.

@Kaijun , je sais qu'il y a peut-être un moyen de pirater xhyve pour faire avancer les

@nikdavis si vous voulez une adresse IP stable, vous pouvez ajouter une adresse IP (vers laquelle vous ne serez jamais acheminé) à l'interface de bouclage lo0 du Mac et l'utiliser.

@justincormack Pourriez-vous être plus précis pour y parvenir? :)
J'ai essayé ce que @itilk a publié, mais cela n'a pas fonctionné pour moi.

De manière générale: existe-t-il un ETA pour réintroduire le réseau docker0 dans docker pour mac beta?

THX

@georgehrke vous pouvez faire sudo ifconfig lo0 alias 10.200.10.1/24 - évidemment choisissez une adresse que vous n'allez pas trouver localement. Vous pouvez ensuite utiliser cette adresse pour parler à l'hôte, que vous disposiez ou non d'une connexion réseau.

Désolé de ne pas avoir précisé mon problème.

Je n'essaye pas de me connecter d'un conteneur à l'hôte, mais l'inverse.
Je ne peux pas me connecter directement de mon hôte à un conteneur.

J'utilisais docker inspect container_name pour obtenir l'adresse IP.
Mais je ne peux ni le cingler ni l'ouvrir dans un navigateur même si le Dockerfile a un serveur Web et EXPOSE 80 dedans

Oui, il y a deux problèmes distincts, qui sont quelque peu liés.

  1. Je souhaite me connecter d'un conteneur à un service sur l'hôte. Le Mac a une adresse IP de changement ou aucune si vous n'avez pas d'accès au réseau.

La recommandation actuelle est d'attacher une adresse IP inutilisée à l'interface lo0 sur le Mac, par exemple sudo ifconfig lo0 alias 10.200.10.1/24 , assurez-vous que votre service écoute sur cette adresse ou 0.0.0.0 (c'est-à-dire pas 127.0.0.1 ). Ensuite, les conteneurs peuvent se connecter à cette adresse.

  1. Je souhaite me connecter à un conteneur depuis le Mac.

La recommandation actuelle est de publier un port ou de se connecter à partir d'un autre conteneur. Notez que c'est ce que vous devez faire même sous Linux si le conteneur est sur un réseau de superposition et non sur un réseau de pont car ceux-ci ne sont pas routés.

Nous comprenons que ce ne sont pas idéaux mais il y a plusieurs problèmes, en particulier un bogue dans OSX qui n'est corrigé que dans 10.12 et qui n'est pas rétroporté pour autant que nous puissions dire, ce qui signifie que nous ne pouvions pas supporter cela dans tous les OSX supportés versions. De plus, cette configuration réseau nécessiterait un accès root que nous essayons d'éviter entièrement dans Docker pour Mac (nous avons actuellement un très petit assistant racine que nous essayons de supprimer).

( @londoncalling voulez-vous ajouter ce résumé à la documentation?)

@justincormack vous voulez dire que tous les --net=host sur macOS Docker sont inutiles?

@ m1ome, ce n'est pas complètement inutile - vous pouvez vous connecter aux services que vous y exécutez à partir d'autres conteneurs lorsque les ports sont ouverts sur la VM, mais les gens s'attendent à ce que les services soient disponibles sur le Mac, comme les ports publiés, ce que nous n'avons pas fonctionne encore car c'est plutôt complexe (nous n'obtenons pas de flux d'événements pour les ports que vous ouvrez comme ça, contrairement aux ports publiés où nous utilisons des événements docker).

@justincormack existe-

@justincormack Je peux ajouter votre rédaction à la documentation, mais je pense que nous devrions inclure des exemples spécifiques. Je vais l'essayer moi-même, mais j'aurai probablement besoin de votre aide ou de celle de quelqu'un d'autre. Je vous reviendrai là-dessus au fur et à mesure que j'y travaille.

@londoncalling vous en enverra certainement.

Le 30 août 2016 à 18h28, "Victoria" [email protected] a écrit:

@justincormack https://github.com/justincormack Je peux ajouter votre article
à la documentation, mais je pense que nous devrions inclure quelques exemples spécifiques. j'essaierai
moi-même, mais aura probablement besoin de votre aide ou de celle de quelqu'un d'autre. Mauvais
vous en reparler au fur et à mesure que je travaille dessus.

-
Vous recevez cela parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/docker/docker/issues/22753#issuecomment -243515932,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAdcPPgFU3H6TZCLcI0yUvbPn4tPwZj7ks5qlGhUgaJpZM4Ie9PB
.

@justincormack merci - étant donné ce fil, je pense que nous avons besoin d'au moins deux exemples, et peut-être même trois, comme indiqué ci-dessous. Qu'est-ce que tu penses?

  1. Un exemple de la façon d'accéder à un service sur l'hôte Mac à partir d'un conteneur (par exemple, cela fonctionnerait-il pour que l'application soit un serveur Web comme nginx connectant à une base de données redis sur l'hôte?)
  2. Un exemple de connexion à un conteneur depuis le Mac. Notre exemple actuel nginx couvre-t-il le deuxième cas, puisque nous exposons un port dans la commande run ; c'est-à-dire docker run -d -p 80:80 --name webserver nginx ? @justincormack mais nous devrions le montrer avec et sans mappage de port par le commentaire de @weaver ci-dessous, donc probablement deux cas d'utilisation différents ici?
  3. Un exemple de comment exécuter une application dans un conteneur qui utilise un service dans un autre (par exemple, répétez l'exemple nginx plus redis mais cette fois, exécutez redis dans un conteneur?

An example of connecting to a container from the Mac. Does our current nginx example cover the second case, since we expose a port in the run command; i.e., docker run -d -p 80:80 --name webserver nginx?

J'apprécierais vraiment un exemple de connexion d'un Mac à un conteneur qui n'implique pas de mappage de port. Mon cas d'utilisation exécute un cluster mesos pour le développement local. Si le mappage de ports est le seul moyen d'effectuer une communication directe du Mac vers un conteneur (esclave), il nécessite un travail supplémentaire pour s'assurer que chaque processus esclave mesos s'exécute sur un port unique afin que tout accès depuis le Mac (affichage des journaux pour le débogage, pour exemple) est cohérent avec les ports utilisés par mesos en interne (sinon, les frameworks mesos rendent les URL dans des tableaux de bord avec des numéros de port internes qui ne fonctionnent pas depuis l'hôte).

À l'heure actuelle, j'utilise docker-machine avec une route du Mac vers le réseau virtuel afin que toutes les adresses IP et les numéros de port utilisés par le cluster mesos "fonctionnent simplement" à partir du Mac. C'est une solution très simple.

@weaver comme indiqué, il n'existe actuellement aucun moyen de se connecter à un conteneur directement à partir de l'hôte s'il n'a pas de port publié. Vous pouvez cependant vous connecter à partir d'un autre conteneur.

@justincormack J'ai lu tout le fil de discussion en essayant de comprendre comment me connecter de mon mac au conteneur, comme je le fais sous Linux: container-ip: 8080 par exemple. Pour autant que je sache, cela devrait être possible sous MacOS (10.12), non?

@matiasserrano vous pouvez le faire avec le portmapping par exemple docker run -p 8080:8080

@ m1ome oui, je le sais. Mais n'est pas évolutif pour moi. Je suis développeur et j'exécute généralement plusieurs conteneurs avec apache / Nginx, donc 80 est toujours utilisé. Si je fais ce que vous proposez, je dois d'abord désactiver Apache dans mon mac, puis je dois exécuter un conteneur à la fois car ils partagent le même port. L'utilisation de ports différents n'est pas une option.
D'un autre côté, nous donnons des conteneurs aux développeurs pour qu'ils commencent à travailler, et encore une fois, ils pourraient travailler sur plus d'un projet en même temps.
Donc, la possibilité de se connecter du Mac aux conteneurs en utilisant leur IP est un must pour nous.

@matiasserrano Pourquoi ne pas utiliser -P pour transférer automatiquement les ports exposés vers un port haut arbitraire? Si vous recherchez l'adresse IP du conteneur via quelque chose comme docker inspect il est également possible de faire une opération très similaire pour le port exposé.

@nathanleclaire Le problème n'est pas de connaître le port ou l'adresse IP du conteneur, c'est fondamentalement la même solution que le post précédent. Une autre solution consiste à créer une machine virtuelle vagabonde pour chaque projet et à exécuter docker à l'intérieur ou à utiliser docker-machine, c'est fondamentalement la même chose. Les deux solutions ne sont pas acceptables pour nous. Nous préférons utiliser Vagrant à la place.

Pour ce que ça vaut, j'ai un cas d'utilisation similaire à @weaver (c'est-à-dire accéder directement au réseau de conteneurs depuis l'hôte). J'exécute un cluster Spark via Docker, sur son propre réseau. J'utilise docker-machine et j'ajoute une route statique sur l'interface docker0 pour le sous-réseau utilisé par le cluster.

L'interface utilisateur Spark est disponible sur le nœud maître et comprend des liens HTML vers tous les autres nœuds du cluster (via leur adresse IP). En ajoutant la route statique, je peux accéder à l'interface utilisateur Spark sur le maître directement à partir de ma machine de développement, et les liens qu'elle génère vers d'autres nœuds du cluster fonctionnent tous. Ces liens signifient également que ce n'est pas seulement un cas de transfert du port 7080 pour que le maître fonctionne sans docker0 - je dois être en mesure d'atteindre l'ensemble du réseau d'une manière ou d'une autre.

Je suppose qu'une solution de contournement pour le moment serait de faire un routage intelligent via nginx ou un autre proxy Web dans un conteneur supplémentaire, bien que je n'ai pas d'exemple de cela fonctionne pour le moment.

@nathanleclaire Le problème n'est pas de connaître le port ou l'adresse IP du conteneur, c'est fondamentalement la même solution que le post précédent.

Je ne comprends pas.

Vous dites:

Donc, la possibilité de se connecter du Mac aux conteneurs en utilisant leur IP est un must pour nous.

Pourquoi différentes adresses IP en particulier? Vous décrivez les conflits de port comme le problème ici:

Je suis développeur et j'exécute généralement plusieurs conteneurs avec apache / Nginx, donc 80 est toujours utilisé. Si je fais ce que vous proposez, je dois d'abord désactiver Apache dans mon mac, puis je dois exécuter un conteneur à la fois car ils partagent le même port.

Avec -P deux conteneurs n'exposeraient pas le même port, même s'ils écoutent tous sur 80 en interne. Alors pourquoi auriez-vous besoin de toujours désactiver Apache, etc.?

Une autre solution consiste à créer une machine virtuelle vagabonde pour chaque projet et à exécuter docker à l'intérieur ou à utiliser docker-machine, c'est fondamentalement la même chose. Les deux solutions ne sont pas acceptables pour nous. Nous préférons utiliser Vagrant à la place.

Si vous êtes catégorique pour utiliser Vagrant et que vous n'utiliserez pas Docker Machine ou Docker pour Mac, pourquoi déposer / discuter ici?

@nathanleclaire Sous Linux, en utilisant les conteneurs que j'ai créés, si je veux je peux exécuter 4 conteneurs en même temps, par exemple, qui exposent le port 80. IE: Un pour Magento, un pour Drupal, un pour Larabel et un autre avec un clean apache.

Chaque conteneur aura une adresse IP, par exemple 192.100.200.1, 192.100.200.2, 192.100.200.3 et 192.100.200.4.

Avec ces IP, j'ajoute un hôte à mon fichier / etc / hosts, avec un alias pour chacun, exemple:

192.100.200.1 magento.local
192.100.200.2 drupal.local
192.100.200.3 larabel.local
192.100.200.4 apache.local

puis entrez dans les serveurs directement à partir du navigateur.

Sous Mac, je ne peux pas faire cela, car je ne peux pas obtenir une adresse IP pour chaque conteneur. Utiliser -P n'est pas une option, car au lieu d'avoir un alias pour chaque conteneur, je devrai utiliser quelque chose comme localhost: 8012 , pour Magento, localhost: 9823 pour drupal et ainsi de suite.

Une autre solution consiste à utiliser vagrant avec une machine virtuelle Linux pour chaque conteneur exécutant le conteneur à l'intérieur et utilisant le mappage de port 80:80. Avec cette solution, docker n'a aucun sens, car si je crée une machine Vagrant, avec les mêmes choses que le conteneur docker, c'est la même chose. (Je connais les différences entre Docker et Vagrant, et je préfère Docker au lieu de Vagrant 100 fois ...)

J'espère que ce cas d'utilisation vous aidera à comprendre pourquoi il est si important pour nous d'obtenir l'adresse IP du conteneur.

L'exemple est avec le port 80 mais est applicable à n'importe quel port que vous voulez.

@matiasserrano OK, je soupçonnais que cela pourrait être lié au désir de mappage DNS / nom d'hôte, merci.

Avait le même problème (connexion à l'hôte à partir du conteneur). Utiliser 192.168.65.1 a fonctionné pour moi. Je ne suis pas tout à fait sûr de ce que c'est, mais je pense que cela apparaît brièvement dans le journal pinata de @thalesfsp :

🐳  network = hostnet (docker-ipv4=192.168.65.2, host-ipv4=192.168.65.1)
   Controls how local containers can access the external network via the
   MacOS X host. This includes outbound traffic as well as publishing ports
   for external access to the local containers.

(Merci @feedthefire de me montrer ça!)

Si vous êtes catégorique pour utiliser Vagrant et que vous n'utiliserez pas Docker Machine ou Docker pour Mac, pourquoi déposer / discuter ici?

@nathanleclaire C'est une réponse plutôt inutile, insinuant peut-être même que les gens ne devraient pas se plaindre s'ils ne sont pas d'accord. C'est ce genre d'attitude qui donnera à Docker une mauvaise réputation en matière de discussion communautaire.

Merci @cpoonolly , votre réponse est très utile, mais je pense que votre solution fonctionne dans le sens opposé: Container essayant de se connecter à Mac Host. Ce dont j'ai besoin, c'est exactement le contraire: l'hôte Mac tente de se connecter aux conteneurs en utilisant leur adresse IP.

Salut les gens. Ce problème s'est étalé dans une variété de directions et je suggérerais aux responsables du docker / docker de le fermer et de le diviser en plusieurs sous-problèmes. par exemple, un pour atteindre l'IP du Mac depuis l'intérieur de la VM D4M, et un pour l'adressabilité IP par conteneur (bien que je dirais que cela pourrait être mieux en prenant simplement en charge le mappage DNS / nom d'hôte du conteneur de manière native dans D4M). Très probablement dans le référentiel Docker pour Mac car il s'agit du référentiel pour le "Engine", et idéalement devrait avoir des tickets concernant les préoccupations Engine sur Linux / Windows dans le tracker.

Pour ce que ça vaut, il y a _definiment_ un pont docker0 dans la VM Docker pour Mac. Vous pouvez le voir vous-même si vous exécutez un conteneur avec --net host et exécutez ifconfig . Les différents problèmes ici ne concernent pas ce que suggère le titre original: ils concernent la mise en réseau et la visibilité des conteneurs et des machines virtuelles.

@icecrime @justincormack Que pensez-vous. Merci a tous.

@nathanleclaire C'est une bien meilleure réponse, merci, et je suis tout à fait d'accord que se diviser en plusieurs sous-problèmes serait un bon moyen d'avancer ici

Je suis d'accord!!!! pas de problème si vous faites ça!

@nathanleclaire @justincormack , en attendant, la documentation Beta 25 (qui sera publiée aujourd'hui, un peu en retard par rapport aux versions de l'application) fournira les suggestions de Justin et Nathan pour des solutions de contournement dans les rubriques Réseaux et FAQ. Bien que je sache que cela ne résout pas les problèmes de tout le monde, ce sera un début pour fournir des solutions dans la documentation et reconnaître les problèmes.

@matiasserrano dans la prochaine version bêta, prévue mardi, vous pourrez publier des ports sur différentes adresses IP sur l'hôte. Donc, si vous ajoutez plusieurs adresses à l'interface de bouclage, comme je l'ai mentionné ci-dessus, puis ajoutez-les dans votre fichier d'hôtes, vous pourrez publier différents conteneurs sur le port 80 sur chacune de ces adresses et utiliser les noms d'hôte.

donc si vous ajoutez

192.100.200.1 magento.local
192.100.200.2 drupal.local
192.100.200.3 larabel.local
192.100.200.4 apache.local

à /etc/hosts alors vous pouvez faire:

sudo ifconfig lo0 alias 192.100.200.1/24
sudo ifconfig lo0 alias 192.100.200.2/24
sudo ifconfig lo0 alias 192.100.200.3/24
sudo ifconfig lo0 alias 192.100.200.4/24

puis

docker run -p 192.100.200.1:80:80 magento
docker run -p 192.100.200.2:80:80 drupal
...

alors vous devriez pouvoir vous connecter directement à drupal.local etc.

@londoncalling nous devrions documenter ceci pour la prochaine documentation bêta.

@justincormack nitpick : ce bloc est-il correct?

$ ifconfig lo0 alias 192.100.200.1/24
$ ifconfig lo0 alias 192.100.200.2/24
$ ifconfig lo0 alias 192.100.200.2/24
$ ifconfig lo0 alias 192.100.200.2/24

les deux derniers devraient-ils être 192.100.200.3 et 192.100.200.4 ? Et pourquoi alias le cidr entier ( 192.100.200.1/24 est une plage complète de 192.100.200.0 à 192.100.200.255 n'est-ce pas?)? Doit-il être juste la seule adresse IP?

Désolé, faute de frappe. Oui, /32 est bien aussi.

@justincormack Le DNS sera-t-il bientôt dans l'interface graphique? Étant donné que beta25 ne peut toujours pas résoudre les noms DNS sur un VPN à tunnel partagé, j'espérais exécuter dnsmasq sur mon hôte mac. Tous les autres ports de mon mac sont accessibles via 192.168.65.1 à partir de conteneurs internes mais pas de DNS.

Aussi pourquoi docker définit-il 10 adresses IP [192.168.65.1 à 10] dans /etc/resolv.conf?
PS: n'utilisez pas 192.100.xx car c'est une plage publique. Utilisez 192.168.xx

Nous essayons d'éviter d'ajouter DNS à l'interface, mais lisez simplement le
paramètres du Mac. Nous lisons le fichier hosts mais lirons tous les
paramètres bientôt.

Les adresses du fichier hosts sont mappées vers vos résolveurs de fichiers hôtes, mais
autour, de sorte que le basculement fonctionne correctement.

Le 11 septembre 2016 à 19h09, "Jijo Varghese" [email protected] a écrit:

@justincormack https://github.com/justincormack Le DNS sera-t-il dans l' interface graphique?
interface de sitôt? Puisque beta25 ne peut toujours pas résoudre les noms DNS
sur vpn à tunnel partagé, j'espérais exécuter dnsmasq sur mon hôte mac. Tous les autres
les ports sur mon mac sont accessibles via 192.168.65.1 à partir de conteneurs internes mais
pas dns.

Aussi pourquoi docker définit-il 10 adresses IP [192.168.65.1 à 10] dans /etc/resolv.conf?
PS: n'utilisez pas 192.100.xx car c'est une plage publique. Utilisez 192.168.xx

-
Vous recevez cela parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/docker/docker/issues/22753#issuecomment -246194539,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAdcPEQcEyn3w7BPJCeaz5mlbgJx5etTks5qpEPUgaJpZM4Ie9PB
.

Je veux juste remercier @justincormack pour cela:

Oui, il y a deux problèmes distincts, qui sont quelque peu liés.

  1. Je souhaite me connecter d'un conteneur à un service sur l'hôte. Le Mac a une adresse IP de changement ou aucune si vous n'avez pas d'accès au réseau.
    La recommandation actuelle est d'attacher une adresse IP inutilisée à l'interface lo0 sur le Mac, par exemple sudo ifconfig lo0 alias 10.200.10.1/24 , assurez-vous que votre service écoute sur cette adresse ou 0.0.0.0 (c'est-à-dire pas 127.0.0.1). Ensuite, les conteneurs peuvent se connecter à cette adresse.

Bien que ce ne soit pas idéal, cela devrait fonctionner pour nous pour le moment. (testé et fonctionnel)

@justincormack

Nous essayons d'éviter d'ajouter DNS à l'interface, mais lisez simplement les paramètres du Mac.
Les combinaisons VPN sont variées et complexes, il serait donc à courte vue de supposer que vous pouvez toujours lire les bons paramètres. https://github.com/docker/for-mac/issues/19 (fermé) est toujours cassé pour nous sur le VPN à tunnel partagé. Ce n'est probablement pas un problème de docker, mais simplement la façon dont notre serveur VPN fait le split-dns.

Un autre exemple, à mon endroit précédent, nous disions aux gens de QA et de développement de pointer vers différents serveurs de noms en fonction de l'environnement qu'ils voulaient toucher. Si ce type de test n'était nécessaire que dans Docker, c'est un autre cas d'utilisation à prendre en compte. Merci.

Nous travaillons sur la prise en charge des serveurs de noms partagés pour VPN.

Le 13 septembre 2016 à 18h48, "Jijo Varghese" [email protected] a écrit:

@justincormack https://github.com/justincormack

Nous essayons d'éviter d'ajouter DNS à l'interface, mais lisez simplement le
paramètres du Mac.
Les combinaisons VPN sont variées et complexes, il serait donc à courte vue
Supposons que vous puissiez toujours lire les bons paramètres. docker / pour-mac # 19
https://github.com/docker/for-mac/issues/19 (fermé) est toujours cassé
pour nous sur vpn split-tunnel. Ce n'est probablement pas un problème de docker, mais comment
notre serveur VPN fait des split-dns.

Un autre exemple, à mon endroit précédent, nous dirions aux gens de QA et de développement de pointer
à différents serveurs de noms en fonction de l'environnement auquel ils voulaient frapper. Si ce
type de test n'était nécessaire que dans Docker, c'est encore une autre utilisation
cas à considérer. Merci.

-
Vous recevez cela parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/docker/docker/issues/22753#issuecomment -246764433,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAdcPDXx3ziQv81fPBXpQHvU7_j9YWKQks5qpuHdgaJpZM4Ie9PB
.

Merci beaucoup @justincormack , je suis en mesure d'utiliser votre solution de contournement pour accéder directement à tous mes conteneurs en m'aliasant sur lo0 , ce qui me permet d'être opérationnel avec Docker pour Mac: +1:

J'utilise docker-compose pour exécuter mes conteneurs, donc la dernière ride est de configurer la redirection de port pour se lier à la bonne adresse IP sur l'hôte, par conteneur. (La liaison à 0.0.0.0 me donnera des conflits de port lorsque j'ai plus d'un conteneur).

Je ne sais pas si quelqu'un a trouvé un moyen de contourner cela? - J'ai effectivement besoin d'interpoler dans la configuration docker-compose, car l'adresse IP n'est pas connue tant que le conteneur ne démarre pas.

(Je suis heureux que nous nous écartions du numéro original ici).

@NoOrdInaryGuy cela devrait fonctionner sur les dernières versions (à la fois stables et bêta) - vous pouvez spécifier une adresse IP spécifique sur le Mac à laquelle se lier, par exemple une adresse sur lo0 .

@justincormack Oui, je peux confirmer que cela fonctionne avec succès. Le seul problème est lors de l'utilisation de docker-compose (en particulier avec la mise à l'échelle, ou je suppose que vous pouvez simplement configurer des adresses statiques). Il n'est pas possible d'ajouter des transferts de port après le démarrage d'un conteneur, et je ne connais pas un moyen de référencer l'adresse IP réelle du conteneur au fichier de composition / Dockerfile au "runtime", dont je pense avoir besoin pour pour configurer le transfert de port pour écouter sur la bonne adresse IP.

Je travaille à ce sujet pour le moment en n'utilisant pas docker-compose dans ce scénario et en ayant un script bash personnalisé pour invoquer docker, mais je me demandais si quelqu'un d'autre avait pensé à une meilleure solution.

Cela semble prometteur.

Mon cas d'utilisation est similaire à ce que d'autres ont déclaré. Nous créons des conteneurs avec des services Java en cours d'exécution et essayons de tester ces services à partir du système hôte. Nous exécutons les tests dans un pipeline jenkins, donc la publication de ports sur le système hôte est problématique, car le système hôte peut exécuter plusieurs conteneurs essayant tous de lier les mêmes ports.

Donc, généralement, nous «exposons» uniquement les ports, puis utilisons «docker inspect» pour découvrir l'adresse IP du conteneur et nous connecter aux ports de service à cette adresse IP. Lorsque les développeurs veulent essayer les tests sur Mac, nous avons utilisé une astuce boot2docker pour ajouter une route statique aux conteneurs via la VM VirtualBox.

J'ai regardé la version bêta de Mac en espérant que nous pourrions accéder aux ports exposés en utilisant une méthode similaire, et cette astuce d'alias lo0 ressemble au ticket.

Ce n'est probablement pas le lieu pour une demande de fonctionnalité, mais je me demandais s'il serait possible d'ajouter une adresse IP en tant qu'entrée à l'option de publication de tout le docker. Cela ressemblerait à quelque chose comme ça: je:

sudo ifconfig lo0 alias 10.200.10.1/32
docker run --publish-all 10.200.10.1 -d --name webserver mon_test_image

Ensuite, s'il y avait plusieurs ports EXPOSÉS dans my_test_image, je pourrais y accéder via l'alias IP.

Je peux confirmer le docker0 manquant dans le dernier docker-mac


MacBook $ docker version
Client:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.7.1
 Git commit:   6f9534c
 Built:        Thu Sep  8 10:31:18 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   23cf638
 Built:        Thu Aug 18 17:52:38 2016
 OS/Arch:      linux/amd64
MacBook$ docker info
Containers: 7
 Running: 0
 Paused: 0
 Stopped: 7
Images: 107
Server Version: 1.12.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 133
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: host bridge null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.4.20-moby
Operating System: Alpine Linux v3.4
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.953 GiB
Name: moby
ID: W53J:DFZB:4SCO:CS34:6CRF:FCDR:74RZ:TBJC:WZ35:QUVW:NZQU:7ANZ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 17
 Goroutines: 29
 System Time: 2016-09-26T00:20:31.292958501Z
 EventsListeners: 1
No Proxy: *.local, 169.254/16
Registry: https://index.docker.io/v1/
Insecure Registries:
 127.0.0.0/8

Mon besoin est inversé par rapport au message original. Je voudrais accéder à une adresse de conteneur fixe telle que 172.17.0.3 de l'hôte. Par exemple, j'aurai une application Web en cours d'exécution et je veux y accéder depuis l'hôte; Je préfère ne pas faire de redirection de port dégueulasse qui est nécessaire sans docker0 comme interface sur l'hôte. VirtualBox a un réseau d'hôte uniquement et je peux parler à ce réseau d'hôte uniquement à partir de l'hôte.

docker0 est vu si mon hôte est linux; il ne manque qu'avec docker-mac. Je ne veux pas non plus utiliser virtualbox pour exécuter docker sur mac.

Comme décrit dans la doc: certains types de bogues sont corrigés dans la version 10.12

Nous comprenons que ces solutions de contournement ne sont pas idéales, mais il existe plusieurs problèmes. En particulier, _ il y a un bogue dans OSX qui n'est corrigé que dans 10.12 _ et qui n'est pas rétroporté pour autant que nous puissions le dire, ce qui signifie que nous ne pouvions pas le supporter dans toutes les versions OSX prises en charge.

Je demanderais donc si Docker résout déjà ce problème dans 10.12? ou ce n'est toujours pas le cas, pour la compatibilité de toutes les versions.

@Kaijun non, nous devons prendre en charge plusieurs versions d'OSX, et la façon dont nous le faisions auparavant a d'autres problèmes, il est donc peu probable que nous y revenions.

Salut, j'apprécie vraiment toute la discussion dans ce fil. Je me demande: quelqu'un pourrait-il résumer (ou m'indiquer) ce problème réel avec OS X qui nous empêche de pouvoir établir une route directement dans les conteneurs?

J'ai vu des commentaires sur le problème avec OS X (ici et dans d'autres threads). Je n'arrive pas à trouver une description solide de ce qui est réellement le problème, pourquoi 10.12 est en quelque sorte corrigé, etc.

(1) Pourquoi cela fonctionne-t-il pour quelque chose comme virtualbox / docker-machine mais pas pour xhyve?

(2a) Même si docker ne peut pas prendre en charge cette fonctionnalité uniquement pour 10.12, y a-t-il quelque chose que je peux faire si j'exécute 10.12 pour le pirater et le faire fonctionner?

(2b) Quels sont les «autres problèmes» liés à la «façon dont nous le faisions avant»?

Je suis vraiment désolé si ce sont des questions stupides (ou si la réponse est déjà dans ce fil et je l'ai manquée).

Merci.

@weaver, nous vmnet sur https://github.com/docker/hyperkit qui crée un pont pour la VM, ce qui permet le routage des conteneurs vers l'hôte sur une IP sur le pont. Cela ne permet cependant pas utilement le routage vers les conteneurs. Il y avait un CVE lié à cela exposant un serveur DNS ouvert lorsqu'il était activé, ce qui a été corrigé dans Sierra.

Le mode vmnet présente de nombreux autres inconvénients: pas de support IPv6, peu de contrôle, nous devons exécuter en tant que root, ne fonctionne pas avec de nombreuses configurations VPN, etc. Nous avons commencé à utiliser le "mode VPN" comme option, qui est devenu la valeur par défaut actuelle, puis l'autre option a été supprimée après le problème de sécurité.

L'option selon laquelle le pont docker0 apparaîtrait comme par magie sur le Mac et non sur la machine virtuelle Linux n'a jamais été implémentée et n'est pas vraiment possible, de la même manière qu'elle n'est pas disponible si vous utilisez un hôte distant non plus. . Cependant, les gens en sont venus à se fier à diverses façons d'utiliser diverses configurations de routage, et nous aimerions essayer de prendre en compte certains de ces cas d'utilisation, mais ce n'est pas très facile à faire. Virtualbox installe des modules de noyau dans le Mac pour ce faire, ce que nous n'allons pas faire.

Salut,

Tout d'abord, permettez à quiconque de ne plus répondre avec des réponses sur le transfert de port. Nous le savons et nous ne le voulons pas, car comme beaucoup l'ont déjà publié, nous voulons un simple port sur l'accès IP.
Pouvons-nous essayer de garder ce fil sur les solutions pour cela?
J'ai été très surpris que ce ne soit pas possible. Je ne vois pas pourquoi nous avons besoin d'un pont sur le mac en soi, tant que le réseau est routable?

Donc, pour tous ceux qui veulent juste cela: supprimez docker pour mac, installez la boîte à outils docker et exécutez quelque chose comme:
sudo route -n ajouter 172.17.0.0/24 192.168.99.100
où 172.xxx est le réseau docker configuré dans l'hôte VirtualBox et le 192.xxx est l'adresse IP réelle de cet hôte qui est routable sur le mac (via l'interface réseau VirtualBox).
Il achemine simplement le trafic correctement.

Cela peut-il être ajouté à la documentation du docker?

Puisque ce qui précède m'a donné ce que je veux, je n'ai pas cherché plus loin dans xhyve.
La solution ne serait-elle pas d'entrer une commande similaire à celle ci-dessus, qui fonctionne avec la configuration du réseau à partir de là? Je n'ai pas pu cingler l'adresse 192.168.65.x, donc un ajout d'itinéraire ne fonctionnerait pas. Si quelqu'un publie la commande pour l'activer, la commande route devrait également fonctionner.

Problème résolu? Ce serait formidable que ceux-ci soient documentés là où il décrit la limitation mac.
Je vous remercie

@justincormack @ dmp42 @jeanlaurent pouvez-vous jeter un oeil au commentaire @VGerris directement ci-dessus, et

Est-il possible que cela puisse être corrigé pour 10.12 et générer une erreur / avertissement si le correctif 10.12 requis n'est pas présent sur le système? Vous pouvez ensuite documenter la solution de contournement / etc / host ou toolbox pour les personnes exécutant 10.11.

Imho pouvoir accéder au réseau de conteneurs à partir de l'hôte sans redirection de port ou configuration manuelle du réseau est une fonctionnalité fondamentale de docker. Le fait que cela ne fonctionne pas comme prévu est vraiment un problème majeur.

@justincormack - cela ne fonctionne toujours pas pour notre configuration DNS partagée après la version bêta d'aujourd'hui.

répéter d'en haut.

Nous essayons d'éviter d'ajouter DNS à l'interface, mais lisez simplement le
paramètres du Mac.

Les combinaisons VPN sont variées et complexes, il serait donc à courte vue de supposer que vous pouvez toujours lire les bons paramètres.

@justincormack vous n'avez fourni aucune solution aux utilisateurs de Docker pour mac, l'accès ip est très demandé, car développer avec docker nécessite un accès direct au service de conteneur depuis docker-container et depuis l'hôte, la redirection de port ne fonctionne pas pour cette situation (le le service aura une adresse différente d'un endroit différent).

aussi la libvmnet pas si bien, mais c'est une solution, sudo est acceptable que rien !!!

la solution d'appareil tap nécessite une autorisation sans sudo. au moins, docker pour mac devrait fournir un moyen de piraterie de laisser le développeur faire son chemin. par exemple, l'argument de la commande hyperkit start peut être personnalisé par les utilisateurs.

À l'heure actuelle, le docker pour mac est presque inutile pour les gens.

merde!

Y a-t-il une vue sur si ou quand cela sera réglé?

@justincormack : De plus, cette configuration réseau nécessiterait un accès root que nous essayons d'éviter entièrement dans Docker pour Mac (nous avons actuellement un très petit assistant racine que nous essayons de supprimer).

Pourquoi? Sous Linux, il n'est pas possible d'exécuter docker sans privilèges root et tout va bien, sous OSX, vous voulez éviter cela. Quelle est la raison derrière cela? Donc, à partir de maintenant, docker pour OSX devrait être comme l'application Facebook, peu importe que la fonctionnalité principale ne fonctionne pas, mais elle ne nécessitait pas de privilèges root?

IMO si le privilège root aide à résoudre ce problème, corrigez-le et essayez en attendant de le résoudre sans root. Nous sommes actuellement sans fonctionnalité principale, que nous avions l'habitude de faire, que nous avions planifiée tout le flux basé sur cette fonctionnalité, et maintenant nous devons résoudre de nombreux problèmes.

Un compromis acceptable serait-il de considérer cela comme une fonctionnalité avancée? Et lorsque les fonctionnalités avancées sont activées, elles nécessitent des privilèges supplémentaires?

La raison pour laquelle je veux que cette fonctionnalité soit renvoyée est de conserver des éléments sur les ports standard. Nous avons une convention de dénomination standard pour tous nos services. J'ai des enregistrements DNS créés pour même les développeurs qui pourraient indiquer une adresse IP statique sur leur Mac. Chaque conteneur a sa propre adresse IP, il s'agit donc toujours du port 3306, quel que soit le projet avec lequel vous travaillez. Chaque projet est vraiment séparé comme il l'est dans qa jusqu'à prd.

Désormais, lorsqu'un développeur souhaite se connecter à MySQL sur sa machine locale, il doit consulter un graphique pour voir le port unique du projet. Le projet A est 3307, le projet B est 3308 ce qui était encore le projet Q? La randomisation du port est également bâclée car elle ne vous permet pas d'enregistrer les paramètres de connexion et autres. Vous devez toujours le rechercher tout le temps.

Bien que cela puisse sembler un problème mineur. Basculer très fréquemment entre les projets est ennuyeux, cette standardisation supprime de nombreuses étapes supplémentaires. Vous souhaitez travailler sur un autre projet? Git clone et exécutez make. TOUT est configuré à partir de là. Plusieurs conteneurs, informations d'identification, configurations, etc. Configuration de développement de commande unique.

+1, désespérément nécessaire: - /

Je viens de rattraper la documentation sur https://docs.docker.com/docker-for-mac/networking/ donc je comprends les défis impliqués.

Malheureusement, il s'agit d'un obstacle majeur à l'utilisation de docker native dans notre environnement de développement local. J'avais espéré migrer loin de Virtualbox / Vagrant.

Notre problème est que nous utilisons Consul pour la découverte de services. Pour le développement local, nous voulons exécuter un mélange de services à partir de docker-compose et directement à partir des IDE du développeur sur Mac. Puisque les services s'exécutant dans des conteneurs s'enregistrent auprès de consul en utilisant leur docker ip: port, les services s'exécutant en dehors de docker ne peuvent pas s'intégrer.

Bien sûr, c'est aussi un problème dans un cluster multi-hôte, mais cela est résolu soit par le réseau de superposition (ou dans notre cas, un script de point d'entrée d'introspection odieusement piraté qui comprend les mappages IP hôte: port).

Il semble qu'une API d'introspection est enfin en cours de développement pour aider à résoudre ce type de problème (https://github.com/docker/docker/issues/7472). Espérons que l'API d'introspection fonctionnera également avec docker pour mac / windows).

hé les gars, je pense qu'il y a quelque chose qui vaut la peine d'être partagé lié à ce fil, nous pouvons parler à la machine host depuis les conteneurs en utilisant le default IP créé par Docker for Mac/Windows .

L'adresse IP est 192.168.65.1

Vous pouvez le tester en suivant les étapes ci-dessous:

rogaha@MacBook-Pro:~/development/rogaha$ docker run --name docker-nginx -p 80:80 -d nginx                                
4bc4818c49cffd7b4186294c71e6d4608c0482fd74521b3e9d03a14d499b3e6b
rogaha@MacBook-Pro:~/development/rogaha$

rogaha@MacBook-Pro:~/development/rogaha$ docker run -it --rm tutum/curl curl 192.168.65.1                                                                                   5:52:22
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
rogaha@MacBook-Pro:~/development/rogaha$

J'espère que ça aide!

@rogaha C'est une information intéressante. Est-ce documenté quelque part? Comment l'avez-vous appris?

J'ai confirmé localement sur mon Mac qu'il atteint effectivement l'hôte (pas seulement un autre conteneur Docker) via 192.168.65.1 .

Je ne suis pas sûr. @thaJeztah @justincormack le savez-vous?

Oui, cet itinéraire a été ajouté pour prendre en charge le contact avec l'hôte.

Jusqu'à ce qu'il y ait une dénomination standard, nous ne recommandons généralement pas d'utiliser
il, car évidemment cela ne fonctionnera pas en production, mais il est correct de passer pour un
paramètre.

Le 27 février 2017 à 08h49, "Roberto Gandolfo Hashioka" [email protected]
a écrit:

Je ne suis pas sûr. @thaJeztah https://github.com/thaJeztah @justincormack
https://github.com/justincormack le savez-vous?

-
Vous recevez cela parce que vous avez été mentionné.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/docker/docker/issues/22753#issuecomment-282777837 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAdcPJ3h5OrhxpgWao8by-qu-UmsuWIOks5rgv62gaJpZM4Ie9PB
.

@rogaha 192.168.65.1 ne fonctionne pas de mon côté. Comment avez-vous découvert cette IP?

Je voulais juste ajouter un + 1 / s'abonner avec tout le monde dans ce fil, et ajouter une autre voix à la demande de fonctionnalité de pouvoir accéder facilement aux conteneurs docker via l'interface de pont sur des adresses IP uniques / personnalisées.

Je me suis enfoncé la tête dans le mur pendant au moins 4 heures pour essayer de comprendre pourquoi je ne pouvais pas faire fonctionner les exemples documentés, jusqu'à ce que je trouve ce problème d'une manière ou d'une autre, décrivant parfaitement le problème.

Pour l'instant, la solution de contournement mentionnée par @justincormack (https://github.com/moby/moby/issues/22753#issuecomment-246054946) semble fonctionner passablement bien. J'ajoute le support expérimental de Docker à Drupal VM en suivant les instructions:

  1. Ajouter un hôte à /etc/hosts avec sudo /etc/hosts (par exemple 192.168.1.100 mysite.dev )
  2. Créez un alias sur l'interface de bouclage: sudo sudo ifconfig lo0 alias 192.168.1.100/24
  3. Affichez un conteneur avec la pseudo-composition suivante:

      version: "3"
    
      services:
        app:
          image: image-name
          ports:
            - 192.168.1.100:80:80
            - 192.168.1.100:443:443
          [...]
    

Cela semble fonctionner parfaitement pour moi, et bien que cela nécessite actuellement quelques étapes manuelles (qui sont évitées si vous utilisez d'autres outils en plus de Docker ... quelque chose que je ne veux pas forcer mes utilisateurs à faire), cela me permet de presque atteindre Docker nirvana sur Mac.

Merci pour la solution de contournement et j'espère que vous pourrez trouver un moyen de faire fonctionner le réseau de pont bientôt (ou simplement abandonner macOS <10.12 😏)

@rogaha merci beaucoup, 192.168.65.1 a résolu mon problème. J'espère que cela ne changera pas à l'avenir, à moins qu'ils ne trouvent une solution plus propre. Depuis Docker pour Mac 17.0.3.1, cela a permis à mon conteneur de parler au serveur MySQL exécuté sur l'hôte local de ma machine.

@TheAntonioReyes Je suis content que cela ait fonctionné pour vous. Merci pour les commentaires!

Salut,

Je lis la documentation ici: https://docs.docker.com/docker-for-mac/networking/#use -cases-and-workarounds, et j'essaie d'utiliser le _le nom DNS spécial Mac uniquement_ mentionné ici : docker.for.mac.localhost .

Si je fais un ping sur un terminal à l'intérieur du conteneur docker, il est résolu en 192.168.65.1 et faire une boucle vers une application exécutée sur mon mac récupère le résultat attendu.

J'utilise cette image: https://github.com/elgalu/docker-selenium , et je peux y ouvrir un navigateur Chrome. J'ai donc voulu aller sur http: //docker.for.mac.localhost : 80, et la connexion a été refusée. Cependant, faire http://192.168.65.1 : 80 fonctionne.

Est-ce que je manque quelque chose? Je voulais commencer à utiliser le docker.for.mac.localhost .

J'utilise ceci: Version 17.06.0-ce-mac18 (18433)

EDIT : Il semble que cela ne se produit que sur Chrome et ce problème l'explique. https://github.com/docker/for-mac/issues/1837

Je pense qu'utiliser docker.for.mac.localhost était une mauvaise décision. L'intérêt des conteneurs est qu'ils sont portables et qu'ils ne doivent pas dépendre du type d'hôte dans lequel ils résident. Si mon équipe est composée à moitié d'utilisateurs de Windows et à moitié de Mac, le code à l'intérieur de nos conteneurs devra être configuré différemment.

Je suis content qu'il y ait une approche de nom d'hôte, je pense juste que la réunion où cette approche a été décidée aurait dû durer 5 minutes de plus.

docker.for.mac.localhost travaillé. Hilarant. https://docs.docker.com/docker-for-mac/networking/#use -cases-and-workarounds

J'ai contourné ce problème en revenant à docker-machine pour Mac. La VM de la machine docker est une distribution Linux, ce qui signifie qu'elle crée une interface docker0 qui a accès à la plage de réseau privé des conteneurs docker. Ensuite, sur ma machine hôte mac, j'ai créé une route pour la plage d'adresses 172.18.xx des conteneurs qui pointe vers l'adresse IP de l'instance de la machine docker (192.168.99.100 dans mon cas).

Cela permet aux paquets destinés au réseau de conteneurs privés d'être transmis par mon mac OS à l'adresse IP de la machine virtuelle Linux de la machine docker, qui sait comment atteindre les conteneurs privés et leur transmet directement les paquets.

Création de la route vers la machine docker VM pour le réseau de conteneurs privé

sudo route -n add -net 172.18.0.0/16 192.168.99.100

Vous pouvez obtenir l'adresse du réseau de conteneurs en utilisant docker network inspect ou docker inspect <container_name> .

Vous pouvez trouver l'adresse IP de l'hôte dans docker pour mac en exécutant cette commande:

docker run busybox ping -c 1 docker.for.mac.localhost | awk 'FNR==2 {print $4}' | sed s'/.$//'

Exécutez cette commande

docker run -i -d --expose=80 <container_name> bash

Ensuite, obtenez l'adresse IP de

docker ps

s'il dit 0.0.0.0, cela fonctionnera bien une fois que le port est exposé ou que toute autre adresse IP y est écrite.

La solution est en fait relativement simple; IDK pourquoi Docker ne le résout pas.

Voir https://github.com/AlmirKadric-Published/docker-tuntap-osx pour une solution de contournement qui corrige le binaire hyperkit.

Copie partielle de # 155 (et # 171, # 515, # 3484).

Je ferme. C'est par conception et de toute façon sans rapport avec ce repo.

Ce qui suit fonctionne à merveille pour moi. Pas de conteneurs intermédiaires, pas de solution de contournement DNS.

De https://github.com/AlmirKadric-Published/docker-tuntap-osx#how -it-works:

Une fois cela fait, l'adresse IP 10.0.75.2 peut être utilisée comme passerelle de routage réseau pour atteindre tous les conteneurs de la machine virtuelle hôte:
route add -net <IP RANGE> -netmask <IP MASK> 10.0.75.2

Merci @pauldraper (!).

@pauldraper a commenté le 14 juil.2019

La solution est en fait relativement simple; IDK pourquoi Docker ne le résout pas.

Voir https://github.com/AlmirKadric-Published/docker-tuntap-osx pour une solution de contournement qui corrige le binaire hyperkit.

Ma version macOS:

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.6
BuildVersion:   18G3020
$
Cette page vous a été utile?
1 / 5 - 1 notes