Docker构建“无法解析'archive.ubuntu.com'”apt-get无法安装任何东西

新手上路,请多包涵

我一直在尝试在以前工作的各种文件上运行 Docker 构建,这些文件现在不再工作。

一旦 Docker 文件包含任何要安装软件的行,它就会失败,并显示一条消息,指出找不到包。

 RUN apt-get -y install supervisor nodejs npm

日志中出现的常见消息是

Could not resolve 'archive.ubuntu.com'

知道为什么任何软件都不会安装吗?

原文由 Matt Carrier 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 849
2 个回答

经过一番头疼后,我找到了答案。 Could not resolve 'archive.ubuntu.com' 可以通过进行以下更改来修复:

  1. 取消注释 /etc/default/docker 中的以下行

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

  1. 重启Docker服务 sudo service docker restart

  2. 删除缓存了无效 DNS 设置的所有图像。

  3. 再次构建,问题应该得到解决。

归功于 Andrew SB

原文由 Matt Carrier 发布,翻译遵循 CC BY-SA 3.0 许可协议

取消注释 DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"/etc/default/docker 正如 Matt Carrier 建议的那样对我 不起作用。也没有将我公司的 DNS 服务器放在该文件中。但是,还有另一种方式(继续阅读)。

首先,让我们验证问题:

 $ docker run --rm busybox nslookup google.com   # takes a long time
nslookup: can't resolve 'google.com'   # <--- appears after a long time
Server:    8.8.8.8
Address 1: 8.8.8.8

如果命令似乎挂起,但最终吐出错误“无法解析 ‘google.com’”,那么你和我有同样的问题。

nslookup 命令查询 DNS 服务器 8.8.8.8 以便将“google.com”的文本地址转换为 IP 地址。具有讽刺意味的是,8.8.8.8 是 Google 的公共 DNS 服务器。如果 nslookup 失败, 您的公司可能会阻止像 8.8.8.8 这样的公共 DNS 服务器(我认为这是出于安全原因)。

您可能认为将您公司的 DNS 服务器添加到 DOCKER_OPTS 中的 /etc/default/docker 应该可以解决问题,但无论出于何种原因,它对我不起作用。我在下面描述了对我有用的方法。

解决方案

在主机上(我使用的是 Ubuntu 16.04),找出主要和次要 DNS 服务器地址:

 $ nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]:              10.0.0.2
IP4.DNS[2]:              10.0.0.3

使用这些地址,创建一个文件 /etc/docker/daemon.json

 $ sudo su root
# cd /etc/docker
# touch daemon.json

把它放在 /etc/docker/daemon.json 中:

 {
    "dns": ["10.0.0.2", "10.0.0.3"]
}

从根退出:

 # exit

现在重新启动docker:

 $ sudo service docker restart

验证

现在检查添加 /etc/docker/daemon.json 文件是否允许您将“google.com”解析为 IP 地址:

 $ docker run --rm busybox nslookup google.com
Server:    10.0.0.2
Address 1: 10.0.0.2
Name:      google.com
Address 1: 2a00:1450:4009:811::200e lhr26s02-in-x200e.1e100.net
Address 2: 216.58.198.174 lhr25s10-in-f14.1e100.net

参考文献

我的解决方案基于 Robin Winslow 的一篇文章,他的解决方案值得称赞。谢谢,罗宾!

“修复 Docker 的网络 DNS 配置。”罗宾温斯洛。检索 2016-11-09。 https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/

原文由 Matthew Kraus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题