我的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_proxy
和https_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中的代理设置 。