我让它正常工作,但现在它停了。我尝试了以下命令,但没有效果:
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也被禁用了
当前回答
只是在这里添加这个,以防有人在运行docker的virtualbox容器中遇到这个问题。我将virtualbox网络重新配置为桥接而不是nat,问题就消失了。
其他回答
对我来说,我在使用podman时遇到了与redhat/centos/fedora用户相同的问题
firewall-cmd --zone=public --add-masquerade
firewall-cmd --permanent --zone=public --add-masquerade
对于更多的防火墙和podman(或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
然后生成我的容器并检查它是否可以访问互联网。
当我尝试在Ubuntu上使用Docker-Compose建立一个项目时,也遇到了这样的问题。
Docker根本无法访问互联网,当我试图ping任何IP地址或nslookup一些URL时,它总是失败。
我尝试了上面描述的所有可能的DNS解析解决方案,但都无济于事。
我花了一整天的时间试图找出到底发生了什么,最后发现所有问题的原因都是防病毒软件,尤其是它的防火墙,出于某种原因阻止了Docker获取IP地址和端口。
当我禁用它时,一切都很好。
所以,如果你安装了防病毒软件,但没有任何帮助解决这个问题-问题可能是防病毒软件的防火墙。
首先在docker容器中运行cat /etc/resolv.conf。如果存在无效的DNS服务器,例如nameserver 127.0.x。X,那么容器将无法将域名解析为IP地址,因此ping google.com将失败。
要检查的第二件事是在主机上运行cat /etc/resolv.conf。每次容器启动时,Docker都会将主机的/etc/resolv.conf文件复制到容器中。所以如果主机的/etc/resolv.conf是错误的,那么docker容器也会错误。
如果你发现主机的/etc/resolv.conf是错误的,那么你有两个选项:
在daemon.json中硬编码DNS服务器。这很简单,但如果您希望DNS服务器更改,则不太理想。 修复主机的/etc/resolv.conf文件。这有点棘手,但它是动态生成的,并且您没有对DNS服务器进行硬编码。
1. 在docker daemon.json中硬编码DNS服务器
编辑/etc/docker/daemon.json { "dns": ["10.1.2.3", "8.8.8.8"] } 重新启动docker守护进程使这些更改生效: Sudo systemctl restart docker 现在当你运行/启动一个容器时,docker会用daemon.json中的值填充/etc/resolv.conf。
2. 修复主机的/etc/resolv.conf文件
A. Ubuntu 16.04及更早版本
对于Ubuntu 16.04及更早的版本,/etc/resolv.conf由NetworkManager动态生成。 注释掉/etc/ networkmanager /NetworkManager.conf中的dns=dnsmasq(带#)行 重启NetworkManager重新生成/etc/resolv.conf: Sudo systemctl restart network manager 在主机上检查:cat /etc/resolv.conf
B. Ubuntu 18.04及以上版本
Ubuntu 18.04 changed to use systemd-resolved to generate /etc/resolv.conf. Now by default it uses a local DNS cache 127.0.0.53. That will not work inside a container, so Docker will default to Google's 8.8.8.8 DNS server, which may break for people behind a firewall. /etc/resolv.conf is actually a symlink (ls -l /etc/resolv.conf) which points to /run/systemd/resolve/stub-resolv.conf (127.0.0.53) by default in Ubuntu 18.04. Just change the symlink to point to /run/systemd/resolve/resolv.conf, which lists the real DNS servers: sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf Verify on the host: cat /etc/resolv.conf
现在你应该在主机上有一个有效的/etc/resolv.conf文件供docker复制到容器中。
我在这里尝试了大部分答案,但唯一有效的是重新创建网络:
$ docker network rm the-network
$ docker network create --driver=bridge the-network
我还需要重新创建使用它的docker容器:
$ sudo docker create --name the-name --network the-network
然后是互联网接入。