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:
--ip-masq=true
à /etc/default/docker
(avec redémarrage désactivé)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
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.
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.
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