Docker apt获取更新失败

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

有人能帮我在码头集装箱里干活吗?每当我尝试在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=“--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个选项:

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

  • 修复主机的
    /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和更早版本,
      /etc/resolv.conf
      是由NetworkManager动态生成的

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

    • 重新启动NetworkManager以重新生成
      /etc/resolv.conf

      sudo systemctl重新启动网络管理器

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

    B.Ubuntu 18.04及更高版本

    • Ubuntu 18.04改为使用。现在默认情况下,它使用本地DNS缓存127.0.0.53。这在容器中是不起作用的,所以Docker将默认使用Google的8.8.8.8 DNS服务器,这可能会破坏防火墙后面的人

    • /etc/resolv.conf
      实际上是一个符号链接(
      ls-l/etc/resolv.conf
      ),默认情况下在Ubuntu 18中指向
      /run/systemd/resolve/stub resolv.conf
      (127.0.0.53)
      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