Docker container ne peut accéder à internet qu'avec --net = host
vient d'installer docker 1.10.1 aujourd'hui en utilisant leur guide d'installation. Cependant, aucun de mes conteneurs ne peut accéder à internet à moins que j'ai utilisé --net=host
dans la commande docker run
. J'ai essayé plusieurs solutions de rechange à partir de ces postes:
- http://odino.org/cannot-connect-to-the-internet-from-your-docker-containers/
- mon conteneur docker n'a pas d'internet
- je ne peux pas obtenir les conteneurs Docker pour accéder à internet?
- Docker conteneur ne peut pas accéder à internet
rien n'a fonctionné jusqu'à présent, sauf pour ajouter --net=host
à la commande run, mais je ne peux pas construire d'images à partir d'un fichier Dockerfile parce que je ne peux pas utiliser --net=host
avec la commande build
.
j'ai lancé docker network inspect bridge
pour vérifier les paramètres pour le pont du réseau docker et a remarqué qu'il utilise (presque) le même sous-réseau et passerelle que mon VPN de travail. Peut-être à l'origine d'un problème? Cela pourrait également expliquer pourquoi lorsque je me connecte à mon travail VPN certains des sites ne se chargent pas.
C'est le résultat de docker network inspect bridge
:
[
{
"Name": "bridge",
"Id": "6d603ebd1c437d0d1f02be8406cf362f7f36d33168e42b9883891bae99834fa9",
"Scope": "local",
"Driver": "bridge",
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
}
}
]
ici ifconfig:
docker0 Link encap:Ethernet HWaddr 02:42:9a:29:4a:c2
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:9aff:fe29:4ac2/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:55 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2080 (2.0 KB) TX bytes:8498 (8.4 KB)
enx00e09f0004bd Link encap:Ethernet HWaddr 00:e0:9f:00:04:bd
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:70948 errors:0 dropped:1 overruns:0 frame:0
TX packets:14839 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14270948 (14.2 MB) TX bytes:3460691 (3.4 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:3407 errors:0 dropped:0 overruns:0 frame:0
TX packets:3407 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:326405 (326.4 KB) TX bytes:326405 (326.4 KB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.17.62.55 P-t-P:172.17.62.55 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1406 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:1773 (1.7 KB) TX bytes:1466 (1.4 KB)
wlp6s0 Link encap:Ethernet HWaddr cc:3d:82:1a:1e:1d
inet addr:10.250.9.73 Bcast:10.250.9.255 Mask:255.255.254.0
inet6 addr: fe80::ce3d:82ff:fe1a:1e1d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4381 errors:0 dropped:0 overruns:0 frame:0
TX packets:4398 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2246805 (2.2 MB) TX bytes:835572 (835.5 KB)
2 réponses
Je ne peux pas construire d'images à partir d'un fichier Dockerfile parce que je ne peux pas utiliser --net=host avec la commande build
C'est le travail du démon docker de pouvoir accéder à l'internet lors de la construction.
vous pouvez l'aider en passant des arguments de construction-temps comme
docker build --build-arg HTTP_PROXY=http://...
C'est-à-dire, si vous êtes derrière un mandataire.
Si vous ne l'êtes pas, vérifiez votre DNS paramètres (ce problème est dans le contexte de boot2docker, qui peut ne pas vous concerner ici, mais il peut encore donner quelques indices sur ce qu'il faut inspecter).
Voici un autre exemple d'émission DNS .
le OP wheeler confirme une question liée au dns dans les commentaires :
j'ai dû désactiver
dnsmasq
dansNetworkManager
, pas je sais pourquoi ça affectait docker, mais la résolution DNS a commencé à fonctionner à l'intérieur des conteneurs quand j'ai désactivé le dnsmasq.
c'est une solution de contournement vu avant ici :
- désactiver dnsmasq en commentant la ligne
dns=dnsmasq
"dans/etc/NetworkManager/NetworkManager.conf
et en redémarrant le gestionnaire de réseau et docker.io services (sudo service network-manager restart && sudo service docker.io restart
).- activer alternativement la ligne commentée
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
dans/etc/default/docker.io
(et aussi redémarrer le docker.io service).
cette dernière solution exige bien sûr que les serveurs 8.8.8.8 / 8.8.4.4 soient accessibles depuis votre réseau.
l'OP ajoute:
Cette solution a fonctionné dans une certaine mesure jusqu'à ce que j'utilise mon VPN pour travailler à partir de la maison, et le sous-réseau du pont docker a été collision avec mon sous-réseau VPN.
il recommande " régler l'ip du pont Docker avec Systemd "
/etc/systemd/system/docker.service.d/docker.conf
doit contenir ceci:
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --bip=192.168.169.1/24
et:
systemctl stop docker
# We need a program called brctl to, well, control the bridge, which is part of the bridge-utils package.
sudo apt-get install bridge-utils
#Bring down the docker0 interface:
sudo ip link set docker0 down
# And delete the bridge.
sudo brctl delbr docker0
# Finally, start the Docker daemon
systemctl start docker
j'ai eu ce numéro sur Ubuntu 16.04 voici le correctif pour cela en éditant le NetworkManager.conf
sudo nano /etc/NetworkManager/NetworkManager.conf
comment out dns=DN-Masq puis redémarrez le Réseaumanager
sudo service network-manager restart
fait!