我让它正常工作,但现在它停了。我尝试了以下命令,但没有效果:
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也被禁用了
我让它正常工作,但现在它停了。我尝试了以下命令,但没有效果:
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也被禁用了
当前回答
唯一能在我的电脑上工作的东西(8.8.8.8不起作用)
找出本地机器中使用的DNS:
$ netstat -ntpl | grep :53
tcp 0 0 10.194.128.1:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.2.1:53 0.0.0.0:* LISTEN -
修改docker配置sudo vim /etc/docker/daemon.Json基于上述信息在您自己的计算机上
{
"dns": ["192.168.122.1","10.194.128.1"]
}
重启码头工人
sudo ip link delete docker0
sudo systemctl restart 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,一切都会很好。
缺少代理设置也可能导致无法上网。在这种情况下,——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中的代理设置。
只是在这里添加这个,以防有人在运行docker的virtualbox容器中遇到这个问题。我将virtualbox网络重新配置为桥接而不是nat,问题就消失了。
唯一能在我的电脑上工作的东西(8.8.8.8不起作用)
找出本地机器中使用的DNS:
$ netstat -ntpl | grep :53
tcp 0 0 10.194.128.1:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.2.1:53 0.0.0.0:* LISTEN -
修改docker配置sudo vim /etc/docker/daemon.Json基于上述信息在您自己的计算机上
{
"dns": ["192.168.122.1","10.194.128.1"]
}
重启码头工人
sudo ip link delete docker0
sudo systemctl restart docker
我使用DOCKER_OPTS="——dns 8.8.8.8",后来发现我的容器不能直接访问互联网,但可以访问我的公司内部网。我把DOCKER_OPTS改为如下:
DOCKER_OPTS="--dns <internal_corporate_dns_address"
替换internal_corporate_dns_address与我们的DNS的IP地址或FQDN和重启docker使用
sudo service docker restart
然后生成我的容器并检查它是否可以访问互联网。