J'ai créé un conteneur de menu fixe Ubuntu sur mon Mac
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d993a622d23 ubuntu "/bin/bash" 42 minutes ago Up 42 minutes 0.0.0.0:123->123/tcp kickass_ptolemy
J'ai mis le port comme 123.
Mon IP du conteneur est 172.17.0.2
docker inspect 5d993a622d23 | grep IP
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"IPAMConfig": null,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
Sur mon Mac, j'essaie de cingler mon conteneur.
Ping 172.17.0.2
, le délai de requête est expiré pour icmp_seq 0 ....
Que devrais-je faire? Ainsi, ma machine locale peut envoyer une requête ping au conteneur que j'ai installé. Ai-je oublié l'installation d'une application sur mon conteneur, qui est un système ubuntu?
La meilleure solution actuelle consiste à vous connecter à vos conteneurs à partir de un autre conteneur. À l’heure actuelle, nous ne pouvons en aucun cas fournir un routage. à ces conteneurs en raison de problèmes avec OSX qu'Apple n'a pas encore résolu. nous suivons cette exigence, mais nous ne pouvons rien faire à ce sujet à l'heure actuelle.
Lorsque vous exécutez Docker Toolbox, Docker Machine via VirtualBox ou n’importe quel VirtualBox VM (comme une définition Vagrant ), vous pouvez configurer un "Host-Only Network" et accéder au réseau de machines virtuelles Docker par ce biais.
Si vous utilisez la machine virtuelle default
boot2docker, ne modifiez pas l'interface existante car vous allez empêcher de nombreux utilitaires Docker de fonctionner, ajoutez une nouvelle interface.
Vous devrez également configurer le routage de votre Mac vers les réseaux de conteneurs via la nouvelle adresse IP de votre VM. Dans mon cas, la plage du réseau Docker est 172.22.0.0/16
et l'adresse IP de l'adaptateur uniquement pour l'hôte sur le VM est 192.168.99.100
.
Sudo route add 172.22.0.0/16 192.168.99.100
Ajouter une route permanente à osx est un peu plus complexe
Ensuite, vous pouvez accéder aux conteneurs à partir de votre Mac
machost:~ ping -c 1 172.22.0.2
PING 172.22.0.2 (172.22.0.2): 56 data bytes
64 bytes from 172.22.0.2: icmp_seq=0 ttl=63 time=0.364 ms
--- 172.22.0.2 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.364/0.364/0.364/0.000 ms
En guise d'alternative, si votre conteneur contient un shell bash, vous pouvez y accéder via
docker exec -it <CONTAINER ID> bash
et alors vous pouvez cingler votre ip virtuel
Cela fonctionne dans ce scénario:
Maintenant, vous devez noter ceci. Les conteneurs sont dans un réseau isolé mais connectés à Internet via votre adaptateur hôte de conteneur Docker. Vous devez donc indiquer au noyau Linux d'être disponible sur votre réseau puis sur votre machine virtuelle Linux:
sysctl net.ipv4.conf.all.forwarding = 1
Sudo iptables -P FORWARD ACCEPT
Maintenant, dans votre hôte Windows, vous devez ajouter une route pour notre réseau de conteneur: Route add "réseau de conteneurs Docker" "Linux VM IP" par exemple
Blockquote
installer:
PC-A
a est docker Host, PC-B
est un autre PC du réseau. Pour envoyer un ping/accéder au conteneur de docker depuis PC-B
, exécutez les règles iptables
- ci-dessous dans l'hôte.
iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT
remarque: eth0
est l'interface de l'hôte et docker0
est le pont virtuel par défaut de docker.
Maintenant, ajoutez la route dans PC-B
route add -net <dockerip> netmask <net mask> gw <docker's Host>
ping/accéder aux services de conteneur directement.