1

J'ai des conteneurs Docker Instances AWS EC2 en cours d'exécution, les conteneurs Docker sont connectés via un réseau Docker qui est répliqué sur un cluster etcd. Mais tous les conteneurs ne peuvent pas se connecter à l'extérieur. Par exemple, si je fais un ping ou un curling sur un hôte, je perds 100% des paquets. Le réseau etcd communique sur l'adresse IP privée AWS.Docker Container ne peut pas se connecter à Internet

Voici mes informations docker:

[email protected]:/home# docker info 
Containers: 3 
Running: 3 
Paused: 0 
Stopped: 0 
Images: 9 
Server Version: 17.05.0-ce 
Storage Driver: devicemapper 
Pool Name: docker-202:1-2050903-pool 
Pool Blocksize: 65.54kB 
Base Device Size: 10.74GB 
Backing Filesystem: xfs 
Data file: /dev/loop0 
Metadata file: /dev/loop1 
Data Space Used: 4.554GB 
Data Space Total: 107.4GB 
Data Space Available: 102.8GB 
Metadata Space Used:sattler 6.922MB 
Metadata Space Total: 2.147GB 
Metadata Space Available: 2.141GB 
Thin Pool Minimum Free Space: 3.221GB 
Udev Sync Supported: true 
Deferred Removal Enabled: false 
Deferred Deletion Enabled: false 
Deferred Deleted Device Count: 0 
Data loop file: /var/lib/docker/devicemapper/devicemapper/data 
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata 
Library Version: 1.02.110 (2015-10-30) 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: bridge host macvlan null overlay 
Swarm: inactive 
Runtimes: runc 
Default Runtime: runc 
Init Binary: docker-init 
containerd version: 9048e5e50717ea4497b757314bad98ea3763c145 
runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228 
init version: 949e6fa 
Security Options: 
apparmor 
seccomp 
    Profile: default 
Kernel Version: 4.4.0-1028-aws 
Operating System: Ubuntu 16.04.3 LTS 
OSType: linux 
Architecture: x86_64 
CPUs: 2 
Total Memory: 7.303GiB 
Name: ip-10-0-127-34 
ID: JFQO:C56I:VM22:UDKJ:QDKD:HUDT:KL3X:JCSR:WAPG:66JL:S4RM:4ENN 
Docker Root Dir: /var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
Experimental: false 
Cluster Store: etcd://127.0.0.1:2379 
Cluster Advertise: 10.0.127.34:2376 
Insecure Registries: 
127.0.0.0/8 
Live Restore Enabled: false 

WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use. 
     Use `--storage-opt dm.thinpooldev` to specify a custom block storage device. 
WARNING: No swap limit support 

Docker Inspect Réseau:

 { 
    "Name": "df-global", 
    "Id": "59aef8ccc5d7464ee715428783b9b03ba7737d298f41cc30a21f4856e75b92c1", 
    "Created": "2017-08-14T09:51:31.650109966Z", 
    "Scope": "global", 
    "Driver": "overlay", 
    "EnableIPv6": false, 
    "IPAM": { 
     "Driver": "default", 
     "Options": {}, 
     "Config": [ 
      { 
       "Subnet": "192.168.1.0/14" 
      } 
     ] 
    }, 
    "Internal": false, 
    "Attachable": false, 
    "Ingress": false, 
    "Containers": { 

    "ep-f257d697653d801395f9154d086a6290694d6ded7aefe827c67dcd10808023eb": { 
      "Name": "elasticsearch-data-1", 
      "EndpointID": "f257d697653d801395f9154d086a6290694d6ded7aefe827c67dcd10808023eb", 
      "MacAddress": "02:42:c0:a8:00:0b", 
      "IPv4Address": "192.168.0.11/14", 
      "IPv6Address": "" 
     }, 
     "ep-f5c1be7a768802154b58b33e67a3f009df1d4f1336297df9f914be9a720bd8ce": { 
      "Name": "postgresql-vg_internal01-prod", 
      "EndpointID": "f5c1be7a768802154b58b33e67a3f009df1d4f1336297df9f914be9a720bd8ce", 
      "MacAddress": "02:42:c0:a8:00:02", 
      "IPv4Address": "192.168.0.2/14", 
      "IPv6Address": "" 

Le même problème est décrit ici: https://forums.docker.com/t/ping-between-containers-on-different-docker-host-but-connected-by-overlay-networ-fails/9960 mais il n'y a pas de réponse

Répondre

1

Run sur l'hôte machine:

sudo ip addr show docker0 

Vous obtiendrez la sortie qui comprend:

inet 172.17.2.1/16 scope global docker0 

L'hôte docker a l'adresse IP 172.17.2.1 sur l'interface réseau docker0.

commencer ensuite le contenant:

docker run --rm -it ubuntu:trusty bash 

et exécuter

ip addr show eth0 

sortie comprendra:

inet 172.17.1.29/16 scope global eth0 

Votre conteneur a l'adresse IP 172.17.1.29. Maintenant, regardez la table de routage: run:

route 

sortie comprendra:

Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
default   172.17.2.1  0.0.0.0   UG 0  0  0 eth0 

Il signifie que l'adresse IP de l'hôte docker 172.17.2.1 est défini comme la route par défaut et est accessible à partir de votre conteneur.

essayer de ping maintenant à votre machine hôte ip:

[email protected]:/# ping 172.17.2.1 
PING 172.17.2.1 (172.17.2.1) 56(84) bytes of data. 
64 bytes from 172.17.2.1: icmp_seq=1 ttl=64 time=0.071 ms 
64 bytes from 172.17.2.1: icmp_seq=2 ttl=64 time=0.211 ms 
64 bytes from 172.17.2.1: icmp_seq=3 ttl=64 time=0.166 ms 

Si cela fonctionne très probablement vous serez en mesure de ping tout IP publique

espère que cela aidera!

+0

Merci pour votre réponse. Si j'essaie de faire un ping sur l'hôte local, je reçois un paquet perdu de 100% et l'information que l'hôte de destination est inaccessible 'root @ be845f307ee6:/# ping 172.17.2.1 PING 172.17.2.1 (172.17.2.1) 56 (84) octets de données. De 172.17.0.3 icmp_seq = 1 Destination hôte inaccessible De 172.17.0.3 icmp_seq = 2 Destination hôte inaccessible De 172.17.0.3 icmp_seq = 3 Destination hôte inaccessible ^ C --- 172.17.2.1 statistiques ping --- 5 paquets transmis, 0 reçu, +3 erreurs, 100% perte de paquets, temps 4022ms tuyau 3' – ghovat

+0

Essayez l'autre réponse .. si toujours pas de chance .. je vais vous aider à faire de vos routes routes et réseaux fixés à pouvoir ping hôte –

+0

J'ai changé le réseau Docker au réseau docker créer -d overlay --subnet 192.168.1.0/14 df-global Maintenant, je peux boucler ou ping google.com et les sites à l'extérieur, mais si je tente de connecter ou de ping à d'autres conteneurs dans le réseau je reçois un paquet perdu. Par exemple, ping db01-prod qui est un conteneur docker. Et je vois le conteneur si je fais le réseau de docker inspecter NAME – ghovat

1

Il existe une alternative si .. si vous ne voulez pas déranger avec les routes de réseautage ..so lors de l'exécution de votre conteneur essayer Docker prend en charge les fichiers de montage de liaison de l'hôte au conteneur. Vous pouvez lier le socket de contrôle Docker.

docker run -v /var/run/docker.sock:/var/run/docker.sock ...usual code here... 

Espérons que cela aidera!

+0

J'ai changé le réseau Docker réseau docker créer -d overlay --subnet 192.168.1.0/14 df-global Maintenant, je peux curl ou ping google.com et les sites à l'extérieur, mais si j'essaie de connecter ou de ping à d'autres conteneurs dans le réseau je reçois un paquet perdu. Par exemple, ping db01-prod qui est un conteneur docker. Et je vois le conteneur si je fais le réseau de docker inspecter NAME – ghovat

1

Pour permettre des conteneurs de parler les uns aux autres: créer un réseau

docker network create <your-network-name> 

puis connectez tous les conteneurs pour créer nouvellement réseau.

docker network connect <your-network-name> <containers> 

Espérons que cela aidera!

+0

Si c'est déjà dans le réseau son doit ping –

+0

Salut, merci pour la réponse. J'ai créé avec cela le réseau $ docker réseau créer -d overlay --subnet 192.168.1.0/14 df-global et connecté tous les conteneurs. Dans le réseau Docker inspecter le RÉSEAU dans la question initiale, vous verrez les conteneurs connectés, mais si je exécute l'un des conteneurs et essayer de cingler un des autres conteneurs qui est dans le réseau, je reçois une perte de 100% et ils ne peuvent pas communiquer. Ni si j'essaie le nom du conteneur ou l'adresse IP du conteneur de l'inspecteur docker – ghovat