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

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也被禁用了


当前回答

对我来说,我在使用podman时遇到了与redhat/centos/fedora用户相同的问题

firewall-cmd --zone=public --add-masquerade
firewall-cmd --permanent --zone=public --add-masquerade

对于更多的防火墙和podman(或docker) -容器中没有互联网,无法解析主机

其他回答

已经有很多好的答案了。我最近在我的橙色pi pc运行armbian时遇到了类似的问题。Docker容器无法连接互联网。这个命令解决了我的问题。所以我喜欢分享它

docker run --security-opt seccomp=unconfined imageName

其他回答指出,docker0接口(桥接)可能是问题的根源。在Ubuntu 20.04上,我观察到接口缺少它的IP地址(用IP addr show dev docker0检查)。仅仅重新启动Docker并没有帮助。我不得不手动删除桥接接口。

sudo ip link delete docker0
sudo systemctl restart docker

对于Ubuntu 19.04使用openconnect 8.3进行VPN,我必须将/etc/resolve.conf符号链接到systemd中的文件(与answerby wisbucky相反)

执行ln -sf /etc/resolv.conf /run/systemd/resolve/resolv.conf

调试步骤

连接到公司VPN 在/etc/resolv.conf或/run/systemd/resolve/resolv.conf中查找正确的VPN设置 无论哪个有正确的DNS设置,我们都会将其符号链接到另一个文件 (提示:在赋值的左边放置一个设置正确的)

Docker版本:Docker版本19.03.0-rc2,构建f97efcc

我不知道我在做什么,但这对我很有用:

OTHER_BRIDGE=br-xxxxx # this is the other random docker bridge (`ip addr` to find)    
service docker stop

ip link set dev $OTHER_BRIDGE down
ip link set dev docker0 down
ip link delete $OTHER_BRIDGE type bridge
ip link delete docker0 type bridge
service docker start && service docker stop

iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
iptables -t nat -A POSTROUTING ! -o docker0 -s 172.18.0.0/16 -j MASQUERADE

service docker start

对我来说,这是iptables的转发规则。由于某种原因,下面的规则,当与docker的iptables规则结合在一起时,导致所有来自容器的出站流量都到达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