【问题标题】:Docker Could not resolve 'deb.debian.org'Docker 无法解析“deb.debian.org”
【发布时间】:2018-12-04 15:47:00
【问题描述】:

我试图在 Docker 中构建一个容器进行一些实验。这是我的Dockerfile

FROM debian

RUN mkdir -p /var/run/sshd

RUN apt-get update
RUN apt-get install -y openssh-server

RUN apt-get install -y sudo

RUN echo AddressFamily inet >> /etc/ssh/sshd_config

ARG username=Rivers
ARG userpasswd=perfectXJ2017

RUN useradd -ms /bin/bash $username && (echo $username:$userpasswd | chpasswd)

RUN adduser $username sudo

CMD /usr/sbin/sshd -D

我尝试使用命令sudo docker build -t ics-image . 构建我的图像。

但后来我收到了一些错误消息,整个过程停止了。这是错误消息。

Sending build context to Docker daemon  2.048kB
Step 1/11 : FROM debian
 ---> 8626492fecd3
Step 2/11 : RUN mkdir -p /var/run/sshd
 ---> Running in 1e1f2dbbe5ca
Removing intermediate container 1e1f2dbbe5ca
 ---> dd4bec2f81d4
Step 3/11 : RUN apt-get update
 ---> Running in 022301215bfb
Get:1 http://security.debian.org/debian-security stretch/updates InRelease [94.3 kB]
Get:2 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [450 kB]
Err:3 http://deb.debian.org/debian stretch InRelease
  Could not resolve 'deb.debian.org'
Err:4 http://deb.debian.org/debian stretch-updates InRelease
  Could not resolve 'deb.debian.org'
Fetched 544 kB in 20s (26.9 kB/s)
Reading package lists...
W: Failed to fetch http://deb.debian.org/debian/dists/stretch/InRelease  Could not resolve 'deb.debian.org'
W: Failed to fetch http://deb.debian.org/debian/dists/stretch-updates/InRelease  Could not resolve 'deb.debian.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.
Removing intermediate container 022301215bfb
 ---> 054d32710b62
Step 4/11 : RUN apt-get install -y openssh-server
 ---> Running in 802d2fa37b8d
Reading package lists...
Building dependency tree...
Reading state information...
Package openssh-server is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'openssh-server' has no installation candidate
The command '/bin/sh -c apt-get install -y openssh-server' returned a non-zero code: 100

我在 Ubuntu 18.04 上完成了这一切。我不明白为什么会发生这种情况以及如何解决这个问题。有人可以帮忙吗?

【问题讨论】:

    标签: ubuntu docker debian


    【解决方案1】:

    您应该首先检查您是否能够从您正在运行 docker 的主机解析deb.debian.org。你可以检查一下 nslookup deb.debian.orgdig deb.debian.org

    如果您无法解析来自主机的问题,请将 nameserver 8.8.8.8 添加到您的 /etc/resolv.conf 文件中,然后重试。 Docker 从/etc/resolv.conf 文件中复制名称服务器。

    或者你可以通过创建文件/etc/docker/daemon.json来设置域名服务器

    {
        "dns": ["8.8.8.8"]
    }
    

    然后重启docker服务:

    $ service docker restart
    

    【讨论】:

    • 这 100% 为我解决了这个问题。谢谢!
    • 非常好,谢谢!我需要在添加到 /etc/resolve.conf 后重新启动守护程序,但不是 daemon.json 编辑。
    【解决方案2】:

    这并没有解决根本问题,但我成功地将 --network=host 添加到 docker build 命令,例如 sudo docker build --network=host -t ics-image .。在我的情况下,/etc/resolve.conf 中的所有内容都是正确的,但是 docker 使用正确的 ip 表存在问题,这是一个快速的解决方法。同样,这不是解决方案,但可能有助于调试问题。

    【讨论】:

      【解决方案3】:

      您的 docker 似乎无法正确解析主机。要检查 docker 是否能够解析 DNS,请执行以下命令。在某些环境中,网络管理员可能会阻止 8.8.8.8。如果 8.8.8.8 被阻止,请使用您的本地 DNS IP。

      sudo docker run busybox nslookup google.com
      
      sudo docker run --dns 8.8.8.8 busybox nslookup google.com
      

      如果第一个命令不起作用而第二个命令工作正常,则表明这是 DNS 解析问题。现在编辑 /etc/docker/daemon.json 并在上述命令中添加适用于您的 DNS 服务器 IP。

      {
          "dns": ["8.8.8.8"]
      }
      

      使用以下命令重新启动 docker 服务以使更改生效。

      service docker restart
      

      执行以下命令以查看您的 docker 现在可以解析 DNS 名称。

      sudo docker run busybox nslookup google.com
      

      【讨论】:

      • 能否添加windows powershell等效命令?
      【解决方案4】:

      我在阻止 DNS 工作的套接字上遇到权限错误。这篇文章中的sudo apt-get purge --auto-remove apparmor (https://forums.docker.com/t/can-not-stop-docker-container-permission-denied-error/41142/3) 终于为我解决了。 Ubuntu - 破坏者。

      【讨论】:

      • 工作,你能解释更多关于解决方案的细节吗?
      猜你喜欢
      • 2020-08-17
      • 2021-03-25
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 2018-04-21
      • 2018-10-23
      • 2018-09-21
      • 2017-01-07
      相关资源
      最近更新 更多