当前位置: 首页 > 知识库问答 >
问题:

我的docker容器没有互联网

霍襦宗
2023-03-14

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

docker运行-dns8.8.8.8基本pinggoogle.com

docker运行基本pinggoogle.com

sysctl-w网络。ipv4.ip_forward=1-在主机和容器上

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

有什么想法吗?

P、 S.ufw也被禁用

共有3个答案

谢鸿
2023-03-14

重新启动docker的预期方法不是手动执行,而是使用服务或系统控制命令:

service docker restart

systemctl restart docker
韦俊英
2023-03-14

按照以下建议修复:

[...]你能试着重置一切吗?

pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d

它会强制docker重新创建网桥并恢复所有网络规则

https://github.com/dotcloud/docker/issues/866#issuecomment-19218300

似乎界面不知何故被“挂”了。

更新docker的最新版本:

上面的答案可能仍然可以帮你完成任务,但自从这个答案发布以来已经有相当长的时间了,docker现在更加完善了,所以在使用iptables之前,请确保先尝试这些。

sudo service docker restart或(如果您在不使用upstart的linux发行版中)sudo systemctl restart docker

佴飞驰
2023-03-14

首先要检查的是运行cat/etc/resolv。docker容器中的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错误,则有2个选项:

>

  • 在daemon.json.中对DNS服务器进行硬编码这很容易,但如果您希望DNS服务器发生变化,这并不理想。

    修复主机的/etc/resolv.conf。这有点棘手,但它是动态生成的,并且您没有对DNS服务器进行硬编码。

    1.在docker守护进程中硬编码DNS服务器。json

    >

  • 编辑etc/docker/daemon。json

    {
        "dns": ["10.1.2.3", "8.8.8.8"]
    }
    

    重启docker守护程序以使这些更改生效:
    sudo systemctl restart docker

    现在,当您运行/启动容器时,docker将填充/etc/resolv。conf,具有来自守护进程的值。json。

    2、修复主机的/etc/resolv。形态

    A. Ubuntu 16.04及更早版本

    >

    注释掉/etc/NetworkManager/NetworkManager.conf中的行dns=dnsmasq(带有#

    重启NetworkManager重新生成/etc/resolv.conf
    sudo systemctl重启network-Manager

    在主机上验证:cat/etc/resolv。形态

    B、 Ubuntu 18.04及更高版本

    >

  • Ubuntu 18.04更改为使用系统解析的生成/etc/resolv.conf。现在默认情况下,它使用本地DNS缓存127.0.0.53。这在容器内不起作用,因此Docker将默认使用Google的8.8.8.8DNS服务器,这可能会为防火墙后面的人中断。

    /etc/resolv。conf实际上是一个符号链接(ls-l/etc/resolv.conf),它指向run/systemd/resolv/stub-resolv。在Ubuntu 18.04中默认为conf(127.0.0.53)。

    只需将符号链接更改为指向/run/systemd/解析/resolv.conf,其中列出了真正的DNS服务器:
    sudo ln-sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

    在主机上验证:cat/etc/resolv。形态

    现在,您应该有一个有效的/etc/resolv。在主机上配置,以便docker复制到容器中。

  •  类似资料:
    • 问题内容: 我的工作正常,但现在停止了。我尝试了以下命令,但无济于事: -在主机和容器上 我所得到的是。Docker版本0.7.0 有任何想法吗? PS也禁用 问题答案: 遵循以下建议进行修复: […]您可以尝试重设所有内容吗? 它将迫使docker重新创建网桥并重新初始化所有网络规则 https://github.com/dotcloud/docker/issues/866#issuecomme

    • 问题内容: 我的智慧到此为止,我梳理了每个Google搜索结果,没有任何帮助。 我完全无法使Docker容器访问互联网。IP转发已启用(),ufw已关闭,我尝试添加这些标志。我在Google上找到的所有可能的解决方案都失败了。 有人知道如何提供帮助吗? 尝试按照此处的建议重设所有内容,通过告诉我即使它没有运行,也可能破坏整个事情。 问题答案: 解决。我按照以下说明进行操作:在行中注释掉

    • 容器互联 如果你之前有 Docker 使用经验,你可能已经习惯了使用 --link 参数来使容器互联。 随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 --link 参数。 新建网络 下面先创建一个新的 Docker 网络。 $ docker network create -d bridge my-net -d 参数指定 Docker

    • 一切都很好,当它是在Ubuntu-18.04.谢谢:)

    • 问题内容: 我有一个在AWS EC2实例上运行的kubernetes集群,并编织为networking(cni)。我已经禁用了docker网络(ipmask和iptables),因为它是通过weave管理的(以避免网络冲突)。 我已经将我的Jenkins作为K8s pod部署在此集群上,并且该jenkins使用jenkins kubernetes插件基于我定义的pod和容器模板生成了动态的slav