我让它正常工作,但现在它停了。我尝试了以下命令,但没有效果:

Docker运行-dns 8.8.8.8 base ping google.com

Docker运行base ping google.com

Sysctl -w net.ipv4。Ip_forward =1 -在主机和容器上

我得到的是未知主机google.com。Docker 0.7.0版本

什么好主意吗?

P.S. ufw也被禁用了


当前回答

缺少代理设置也可能导致无法上网。在这种情况下,——network host也可能不起作用。代理可以通过设置环境变量http_proxy和https_proxy来配置:

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中的代理设置。

其他回答

对我来说,使用centos 7.4,这不是/etc/resolve.conf, iptables, iptables NAT规则或docker本身的问题。问题是主机缺少包bridge-utils, docker需要使用brctl命令来构建桥。Yum安装-y bridge-utils并重新启动docker,解决问题。

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

如果你使用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)

然后(至少在我的经验中),如果你从容器中ping google.com,一切都会很好。

为子孙后代分享一个简单而有效的解决方案。当我们运行docker容器时,没有显式地提到——network标志,它连接到它的默认网桥网络,这禁止连接到外部世界。为了解决这个问题,我们必须创建自己的网桥网络(用户定义的网桥),并且必须使用docker run命令显式地提到它。

docker network create --driver bridge mynetwork
docker run -it --network mynetwork image:version

在分角上, 我的问题是,在启动docker服务之前,我没有安装并启动iptables。在启动docker服务之前,请确保iptables服务已启动并运行。

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