我一直在尝试在以前可以使用的各种文件上运行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/