Docker apt获取更新失败
有人能帮我在码头集装箱里干活吗?每当我尝试在docker容器中运行任何apt get命令时,该命令都会失败。我正在运行Docker版本1.1.1,在ubuntu 12.04上构建bd609d2 当我这样做的时候Docker apt获取更新失败,docker,ubuntu,dns,Docker,Ubuntu,Dns,有人能帮我在码头集装箱里干活吗?每当我尝试在docker容器中运行任何apt get命令时,该命令都会失败。我正在运行Docker版本1.1.1,在ubuntu 12.04上构建bd609d2 当我这样做的时候 $ sudo docker run -i -t ubuntu:14.04 /bin/bash # apt-get update 我会说 无法解析“archive.ubuntu.com” 我尝试在/etc/default/docker中取消注释下面的行 DOCKER_OPTS=“--dn
$ sudo docker run -i -t ubuntu:14.04 /bin/bash
# apt-get update
我会说
无法解析“archive.ubuntu.com”
我尝试在/etc/default/docker中取消注释下面的行
DOCKER_OPTS=“--dns 8.8.8.8--dns 8.8.4.4”
但我还是不能ping google.com
ping:未知主机
我确认容器正在使用dns服务器8.8.8.8和8.8.4.4
root@0baa87fc6322:/#cat/etc/resolv.conf
名称服务器8.8.8.8
名称服务器8.8.4.4
我能够ping两个服务器,所以我非常确定防火墙不仅仅是丢弃我的数据包
在此方面的任何帮助都将不胜感激
谢谢 首先检查您是否有连接,直接ping到ip
91.189.92.201
,该archive.ubuntu.com
指向:
ping 91.189.92.201
如果您仍然无法访问主机,则这不是dns问题
此外,如果你有互联网连接,你可以进行黑客攻击。只需在/etc/hosts
文件中放入一行,问题就解决了:
91.189.92.201 archive.ubuntu.com
感谢您的帮助!我发现这是一个dns问题,这是因为防火墙。在搜索更多内容后,我发现了这个问题,但在搜索“docker apt get fail”时,我找不到这个问题
他的问题与我的问题相似,解决方案帮助我解决了问题。
我已经把他的解决方案抄写给将来发现这个问题的任何人
这些谷歌服务器无法从防火墙后面访问,这就是为什么我们无法解析任何URL
修复方法是告诉Docker要使用哪些DNS服务器。此修复程序取决于您安装Docker的方式:
Ubuntu包
如果已安装Ubuntu软件包,请编辑/etc/default/docker并添加以下行:
DOCKER_OPTS=“--dns--dns”
您可以在此配置中添加任意数量的DNS服务器。编辑此文件后,您需要重新启动Docker服务:
sudo服务docker重启
二进制文件
如果您已通过二进制文件方法(即无软件包)安装Docker,则在启动Docker守护程序时设置DNS服务器:
sudo docker-d-d--dns--dns&
我在两个不同的案例中遇到了这个问题,解决方案也不同 第一款Win7+virtualbox(Xubuntu 16.04) 这一评论起到了作用: 我修改文件/etc/default/docker: DOCKER-OPTS=“--ip masq=true--dns my_ip_dns_win--dns 8.8.8--dns 8.8.4.4" 跑 sudo服务docker重启 Xubuntu操作系统(ubuntu 16.04)上的第二个 先例决议是不够的。 这一评论起到了作用: 我不得不在文件/etc/NetworkManager/NetworkManager.conf中注释一行: dns=dnsmasq 然后跑
sudo restart network manager我正在使用Mint版本,在安装Docker并尝试创建Ubuntu映像后,apt get update命令无法识别,为了解决这个问题,我确实退出了
docker run -it -p 8080:80 ubuntu /bin/bash
echo "91.189.92.201 archive.ubuntu.com" >> /etc/hosts
cat /etc/hosts
apt-get update
如果您看到一个错误,如
无法解决…
,则可能是DNS配置
首先要检查的是在docker容器中运行cat/etc/resolv.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个选项:
/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重启docker
- 现在,当您运行/启动一个容器时,docker将使用
中的值填充daemon.json
/etc/resolv.conf
2。修复主机的
/etc/resolv.conf
A.Ubuntu 16.04及更早版本
- 对于Ubuntu 16.04和更早版本,
是由NetworkManager动态生成的/etc/resolv.conf
- 注释掉
/etc/NetworkManager/NetworkManager.conf中的行
(带有dns=dnsmasq
)#
- 重新启动NetworkManager以重新生成
:/etc/resolv.conf
sudo systemctl重新启动网络管理器
- 在主机上验证:
cat/etc/resolv.conf
- Ubuntu 18.04改为使用。现在默认情况下,它使用本地DNS缓存127.0.0.53。这在容器中是不起作用的,所以Docker将默认使用Google的8.8.8.8 DNS服务器,这可能会破坏防火墙后面的人
实际上是一个符号链接(/etc/resolv.conf
),默认情况下在Ubuntu 18中指向ls-l/etc/resolv.conf
(127.0.0.53)/run/systemd/resolve/stub resolv.conf
USER root RUN rm -rf /var/lib/apt/lists/* RUN rm -rf /etc/apt/sources.list.d/* RUN apt-get update ....Continue using apt-get for installing your stuff.. RUN apt-get install -y maven