我一直在尝试在以前可以使用的各种文件上运行Docker构建,现在不再使用了。

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

RUN apt-get -y install supervisor nodejs npm

日志中显示的常见消息是
Could not resolve 'archive.ubuntu.com'

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

最佳答案

取消将DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"中的/etc/default/docker注释为Matt Carrier,表明 NOT 对我有用。也没有将我公司的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's public DNS server。如果nslookup失败,则8.8.8.8之类的公共(public)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配置。”罗宾·温斯洛(Robin Winslow)。检索2016-11-09。 https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/

关于docker - Docker build “Could not resolve ' archive.ubuntu.com'” apt-get无法安装任何东西,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24991136/

10-10 21:12
查看更多