gpt4 book ai didi

docker - 我的 docker 容器没有互联网

转载 作者:IT老高 更新时间:2023-10-28 12:33:15 25 4
gpt4 key购买 nike

我让它正常工作,但现在它停止了。我尝试了以下命令但无济于事:

docker run -dns 8.8.8.8 base ping google.com

docker run base ping google.com

sysctl -w net.ipv4.ip_forward=1 - 在主机和容器上都有

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

有什么想法吗?

附: ufw 也禁用了

最佳答案

首先要检查的是运行 cat /etc/resolv.confdocker 容器 中。如果它的 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错了,那么你有两个选择:

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

  2. 修复主机的/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 将填充 /etc/resolv.conf使用 daemon.json 中的值.


<强>2。修复主机的/etc/resolv.conf

A. Ubuntu 16.04 及更早版本

  • 对于 Ubuntu 16.04 及更早版本,/etc/resolv.conf由 NetworkManager 动态生成。

  • 注释掉 dns=dnsmasq 行(带有 # )在 /etc/NetworkManager/NetworkManager.conf

  • 重启 NetworkManager 以重新生成 /etc/resolv.conf :
    sudo systemctl restart network-manager

  • 在主机上验证:cat /etc/resolv.conf

B. Ubuntu 18.04 及更高版本

  • Ubuntu 18.04 改为使用 systemd-resolved to generate /etc/resolv.conf .现在默认情况下它使用本地 DNS 缓存 127.0.0.53。这在容器内是行不通的,因此 Docker 将默认使用 Google 的 8.8.8.8 DNS 服务器,这可能会被防火墙后面的人破坏。

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

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

  • 在主机上验证:cat /etc/resolv.conf

现在您应该有一个有效的 /etc/resolv.conf在主机上供 docker 复制到容器中。

关于docker - 我的 docker 容器没有互联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20430371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com