web-dev-qa-db-fra.com

Réseau inaccessible dans le conteneur de menu fixe sans le paramètre --net = Host

Problème : il n'y a pas de connexion Internet dans le conteneur de menu fixe.

Symptômes : ping 8.8.8.8 ne fonctionne pas. Wireshark du système hôte rend:

 19 10.866212113   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=0/0, ttl=64
 20 11.867231972   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=1/256, ttl=64
 21 12.868331353   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=2/512, ttl=64
 22 13.869400083   172.17.0.2 -> 8.8.8.8      ICMP 98 Echo (ping) request  id=0x0009, seq=3/768, ttl=64

Mais ! Si le conteneur était démarré avec --net=Host, Internet fonctionnerait parfaitement.

Ce que j'ai essayé jusqu'à présent: 

  • modification du DNS
  • ajout de --ip-masq=true à /etc/default/docker (avec redémarrage désactivé)
  • activant tout ce qui concerne masquerade/ip_forward
  • modification de l'itinéraire par défaut
  • tout ce qui est suggéré ici

Configuration hôte:

$ Sudo route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.4.2.1      0.0.0.0         UG    0      0        0 eno1.3001
default         10.3.2.1      0.0.0.0         UG    100    0        0 eno2
10.3.2.0      *               255.255.254.0   U     100    0        0 eno2
10.4.2.0      *               255.255.254.0   U     0      0        0 eno1.3001
nerv8.i         10.3.2.1      255.255.255.255 UGH   100    0        0 eno2
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0

Sudo iptables -L, cat /etc/network/interfaces, ifconfig, iptables -t nat -L -nv 

Tout va bien, le transfert est également activé:

$ Sudo sysctl net.ipv4.ip_forward 
net.ipv4.ip_forward = 1
13
beyondfloatingpoint

C'est la réponse incomplète que vous recherchez. Mais je voudrais expliquer pourquoi Internet fonctionne 

Si le conteneur a été démarré avec --net = Host, Internet fonctionnerait parfaitement.

Docker prend en charge trois réseaux par défaut . Dans ce mode, le conteneur (hôte) partagera la pile réseau de l'hôte et toutes les interfaces de l'hôte seront disponibles pour le conteneur . Le nom d’hôte du conteneur correspondra au nom d’hôte du système hôte.

# docker run -it --net=Host ubuntu:14.04 /bin/bash
root@labadmin-VirtualBox:/# hostname
labadmin-VirtualBox
Even the IP configuration is same as the Host system's IP configuration
root@labadmin-VirtualBox:/# ip addr | grep -A 2 eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:b5:82:2f brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
root@labadmin-VirtualBox:/# exit
exit

CONFIGURATION IP SYSTÈME HÔTE

# ip addr | grep -A 2 eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:b5:82:2f brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 

Reportez-vous pour plus d'informations sur la mise en réseau des dockers.

4
Here_2_learn

Pouvez-vous exécuter "Sudo ifconfig" et voir si la plage d'adresses IP de votre connexion Internet (généralement wlan0) entre en collision avec la plage de l'interface docker0 172.17.0.0?

J'ai eu ce problème avec mon réseau de bureau (alors qu'il fonctionnait bien à la maison) qu'il a fonctionné sur 172.17.0.X et Docker a essayé de choisir exactement cette gamme.

Cela pourrait être utile: http://jpetazzo.github.io/2013/10/16/configure-docker-bridge-network/

J'ai fini par créer mon propre réseau de ponts pour Docker.

0
Laszlo Fogas

Vérifiez que net.ipv4.conf.all.forwarding (et non net.ipv4.ip_forward) est défini sur 1. Sinon, activez-le:

$ sysctl net.ipv4.conf.all.forwarding

net.ipv4.conf.all.forwarding = 0

$ sysctl net.ipv4.conf.all.forwarding=1

$ sysctl net.ipv4.conf.all.forwarding

net.ipv4.conf.all.forwarding = 1
0
Camilo Silva