Mi contenedor docker no tiene internet

Lo hice funcionar bien, pero ahora se detuvo. Intenté los siguientes commands sin ningún resultado:

docker run -dns 8.8.8.8 base ping google.com

docker run base ping google.com

sysctl -w net.ipv4.ip_forward=1 – tanto en el host como en el contenedor

Todo lo que obtengo es unknown host google.com . Docker versión 0.7.0

¿Algunas ideas?

PS ufw deshabilitado

La forma prevista de reiniciar el acoplador no es hacerlo manualmente, sino usar el service o el command init:

 service docker restart 

Solucionado siguiendo este consejo:

[…] ¿puedes intentar restablecer todo?

 pkill docker iptables -t nat -F ifconfig docker0 down brctl delbr docker0 docker -d 

Obligará a Docker a recrear el puente y reiniciar todas las reglas de la networking

https://github.com/dotcloud/docker/issues/866#issuecomment-19218300

Parece que la interfaz fue 'colgada' de alguna manera.

Actualizando esta pregunta con una respuesta para OSX (usando Docker Machine)

Si está ejecutando Docker en OSX utilizando Docker Machine, entonces lo siguiente funcionó para mí:

 docker-machine restart <...wait for it to restart, which takes up to a minute...> docker-machine env eval $(docker-machine env) 

Entonces (al less en mi experiencia), si haces ping a google.com desde un contenedor, todo estará bien.

Estaba usando DOCKER_OPTS="--dns 8.8.8.8" y luego descubrí que mi contenedor no tenía acceso directo a internet pero podía acceder a mi intranet corporativa. Cambié DOCKER_OPTS a lo siguiente:

 DOCKER_OPTS="--dns <internal_corporate_dns_address" 

reemplazando internal_corporate_dns_address con la dirección IP o FQDN de nuestro DNS y reiniciando el docker usando

 sudo service docker restart 

y luego generé mi contenedor y verifiqué que tenía acceso a internet.

Si su /etc/resolve.conf en el equipo host tiene el nameserver 127.0.1.1 , puede solucionarlo ejecutando esto en el equipo host:

 sudo vi /etc/NetworkManager/NetworkManager.conf # Comment out the line `dns=dnsmasq` with a `#` # restart the network manager service sudo systemctl restart network-manager cat /etc/resolv.conf 

Ahora /etc/resolv.conf debería tener un valor válido para nameserver, que será copydo por los contenedores Docker.

Para mí fue el firewall del host. Tuve que permitir DNS en el firewall del host. Y también tuvo que reiniciar Docker luego de cambiar la configuration del firewall del host.

Para mí fue una regla de reenvío de iptables. Por alguna razón, la siguiente regla, cuando se combina con las reglas de iptables de Docker, provocó que todo el tráfico saliente de los contenedores llegue a localhost:8080 :

 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080 

En Windows (8.1) eliminé la interfaz de la caja virtual (a través de taskmgr) y resolvió el problema.

Es posible que haya comenzado su docker con opciones de dns --dns 172.xxx

Tuve el mismo error y eliminé las opciones de /etc/default/docker

Las líneas:

 # Use DOCKER_OPTS to modify the daemon startup options. DOCKER_OPTS="--dns 172.xxx" 

Si está en OSX, es posible que deba reiniciar su máquina después de instalar Docker. Esto ha sido un problema a veces.

El acceso a Internet no puede ser causado por la falta de configuration de proxy . En ese caso, el --network host puede no funcionar tampoco. El proxy se puede configurar estableciendo las variables de entorno http_proxy y https_proxy :

 docker run -e "http_proxy=YOUR-PROXY" \ -e "https_proxy=YOUR-PROXY"\ -e "no_proxy=localhost,127.0.0.1" ... 

No se olvide de establecer no_proxy también, o todas las requestes (incluidas las de localhost) pasarán por el proxy.

Más información: Configuración de Proxy en Archlinux Wiki.