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

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


当前回答

用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,一切都会很好。

其他回答

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

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

用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,一切都会很好。

对于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

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

如果你运行的Docker是无根的,并且遇到了这个问题,在安装过程中,iptables可能没有正确配置,主要是因为在Docker抱怨iptables时使用了——skip-iptables选项:

[ERROR] Missing system requirements. Run the following commands to
[ERROR] install the requirements and run this tool again.
[ERROR] Alternatively iptables checks can be disabled with --skip-iptables .

########## BEGIN ##########
sudo sh -eux <<EOF
# Load ip_tables module
modprobe ip_tables
EOF
########## END ##########

让我们检查一下这是否是问题所在:是否加载了ip_tables内核模块?

sudo modprobe ip_tables

如果没有输出,这个答案可能对您没有帮助(无论如何您都可以尝试)。否则,输出如下所示:

modprobe: FATAL: Module ip_tables not found in directory /lib/modules/5.18.9-200.fc36.x86_64

让我们来解决它!

首先,卸载Docker rootless(不需要通过systemctl停止服务,脚本会处理):

dockerd-rootless-setuptool.sh uninstall --skip-iptables

确保安装了iptables包,尽管它是由主要发行版默认提供的。

现在,让ip_tables模块对modprobe可见并安装它(多亏了这个):

sudo depmod
sudo modprobe ip_tables

现在,重新安装Docker rootless:

dockerd-rootless-setuptool.sh install

如果它不打扰iptables,你就完成了,问题应该得到解决。不要忘记启用服务(即systemctl enable——user——now docker)!