web-dev-qa-db-fra.com

Comment pourrais-je cingler mon conteneur de menu fixe à partir de mon hôte

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?

11
Neil

Vous ne pouvez pas utiliser ping ni accéder à une interface de conteneur directement avec Docker pour Mac

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.

Docker Toolbox/VirtualBox

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
16
Matt

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

2

Cela fonctionne dans ce scénario:

  1. Hôte Windows
  2. Linux VM installé sur l'hôte Windows
  3. Conteneur Docker installé sur Linux VM Host

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

route ajouter 172.17.0.0/16 192.168.1.20

Blockquote

0
Ángel Ugarte

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. 

0
Guru