我的docker集装箱没有互联网

我把它工作好了,但现在停了下来。 我尝试了下面的命令没有用:

docker run -dns 8.8.8.8 base ping google.com

docker run base ping google.com

sysctl -w net.ipv4.ip_forward=1 – 在主机和容器上

我所得到的是unknown host google.com 。 Docker版本0.7.0

有任何想法吗?

PS ufw禁用

重新启动docker的预期方式不是手动执行,而是使用service或init命令:

 service docker restart 

通过以下build议修复:

你可以尝试重置一切吗?

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

这将迫使docker重新创build桥梁并重新创build所有的networking规则

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

似乎不知何故“界面”被挂起。

用OSX的答案更新这个问题(使用Docker机器)

如果您使用Docker Machine在OSX上运行Docker,那么以下内容适用于我:

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

然后(至less在我的经验),如果你从容器平google.com一切都会好起来的。

我正在使用DOCKER_OPTS="--dns 8.8.8.8" ,后来发现,我的容器没有直接访问互联网,但可以访问我的企业内部网。 我改变了DOCKER_OPTS到以下内容:

 DOCKER_OPTS="--dns <internal_corporate_dns_address" 

使用我们的DNS的IP地址或FQDNreplaceinternal_corporate_dns_address ,然后重新启动docker

 sudo service docker restart 

然后产生我的容器,并检查它可以访问互联网。

如果主机上的/etc/resolve.conf具有nameserver 127.0.1.1 ,则可以通过在主机上执行此操作来解决该问题:

 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 

现在/etc/resolv.conf应该有一个名称服务器的有效值,它将被docker容器复制。

对我来说,这是主机的防火墙。 我必须允许主机的防火墙上的DNS。 更改主机防火墙设置后,也必须重新启动docker。

对我来说这是一个iptables转发规则。 出于某种原因,以下规则与docker的iptables规则配合使用时,导致所有来自容器的出站stream量都被命中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 

在Windows(8.1)我杀了virtualbox接口(通过taskmgr),它解决了这个问题。

你可能已经开始你的docker与dns选项--dns 172.xxx

我有同样的错误,并从/etc/default/docker删除了选项

线路:

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

如果你在OSX上,你可能需要在安装Docker之后重新启动你的机器。 这有时是一个问题。

没有互联网访问也可以由缺less代理设置造成的。 在这种情况下, – --network host可能无法正常工作。 代理可以通过设置环境variableshttp_proxyhttps_proxy进行configuration:

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

不要忘记设置no_proxy,或者所有请求(包括到localhost的请求)都将通过代理。

更多信息:Archlinux Wiki中的代理设置 。