【问题标题】:Dockerfile fails to buildDockerfile 无法构建
【发布时间】:2017-12-04 04:12:04
【问题描述】:

直到几天前Dockerfile 工作正常,当我今天尝试再次构建它时,它在终端中出现以下错误。我尝试了多个 docker 基本图像,但仍然给出相同的错误。谁能帮我这个?我不认为我错过了什么。如果我错过了,它应该早点给我错误,但为什么现在呢?

Err:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
  Temporary failure resolving 'security.ubuntu.com'
Err:2 http://archive.ubuntu.com/ubuntu xenial InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-backports/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package software-properties-common    

我的 docker 版本是 Docker version 17.03.2-ce, build f5ec1e2


这是我的Dockerfile

FROM ubuntu:16.04

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update -y && \
    apt-get install -y software-properties-common && \
    apt-add-repository ppa:webupd8team/java && \
    apt-get update -y && \
    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886 && \
    echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \
    apt-get install -y oracle-java8-installer && \
    apt-get install -y oracle-java8-unlimited-jce-policy && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    rm -rf /var/cache/oracle-jdk8-installer

ENV JAVA_HOME /usr/lib/jvm/java-8-oracle

【问题讨论】:

  • 看起来像一个连接错误。 Docker 无法找到有关当前 ubuntu 的信息,并且在忽略该警告后无法获取 software-properties-common 包。您有任何代理或连接问题吗?
  • 不。连接很好。我现在该如何进行?有什么解决办法吗
  • 肯定是连接问题。我尝试了您的 Dockerfile,它运行良好。可以试试install -y --no-install-recommends?
  • 那我该如何解决这个连接问题?
  • 你能不能尝试执行一个 ubuntu 容器,然后在谷歌上做一个 curl。只是为了检查。

标签: docker dockerfile


【解决方案1】:

如果您的主机是 Ubuntu 虚拟机,它可能是无效的 /etc/resolve.conf。查看主机 Ubuntu VM 上的 /etc/resolv.conf。如果它包含nameserver 127.0.1.1,那就错了。

在主机 Ubuntu VM 上运行这些命令来修复它:

sudo vi /etc/NetworkManager/NetworkManager.conf
# Comment out the line `dns=dnsmasq` with a `#`

# restart the network manager service
sudo systemctl restart network-manager

cat /etc/resolv.conf

现在/etc/resolv.conf 应该有一个有效的名称服务器值,它将被 docker 容器复制。

【讨论】:

    【解决方案2】:

    您的 RUN 指令中似乎存在连接错误。

    尝试在 Ubuntu 容器中执行相同的命令。
    docker run -it ubuntu bash

    然后在容器内执行你的 RUN 命令。

    在我的机器上,你的脚本确实有效。

    【讨论】:

    • 我能够执行ubuntu 容器但无法执行apt-get update。如何解决这个问题?即使我尝试重新安装所有东西(带有 docker 的新 VM)
    • 好的。我刚刚更改了我的 VM 播放器网络设置。将 Network Connection 从 bridged mode 更改为 NAT。现在它的工作。
    • 太好了,有时虚拟机网络设置会很麻烦^^
    • 你知道如何结束这个问题吗?
    • 您只能通过接受答案或删除它来“关闭”一个问题。您应该发布一个回答,说明您是如何解决问题的,然后接受它。
    【解决方案3】:

    对我有用的解决方案是

    1. 检查我的主机 /etc/resolv.conf - 寻找 nameserver x.x.x.x

    2. 将那里的名称服务器复制到我的主机的/etc/docker/daemon.json

      • 这可能需要您sudo su 才能订购cd /etc/docker
      • 你可能没有那个文件,所以刚刚创建它:nano daemon.json
      • 添加以下内容:
    {
        "dns": ["x.x.x.x", "z.z.z.z", "8.8.8.8"]
    }
    

    x.x.x.x 和 z.z.z.z 可能是您的域名服务器 8.8.8.8是google的,你可以试试。

    1. 需要重启docker daemon - sudo service docker restart

    随着时间的推移,我的域名服务器(在我家)发生了变化,所以我有一些,或者我必须不时地添加到这个文件中。如果您在不同的地方使用互联网,它也可能会发生变化 - 所以这并不总是最好的解决方案。

    【讨论】:

      【解决方案4】:

      我刚刚更改了我的 VM 播放器网络设置。将 Network Connection 从 bridged mode to NAT 更改为。 现在它工作了

      【讨论】:

        【解决方案5】:

        在我的例子中,daemon.json 中禁用了桥接网络。

        如下修复后,它工作了。

        root@pc:/etc/docker# cat daemon.json
        {
            "iptables": true,
            "bridge": "docker0"
        }
        

        别忘了重启:

        sudo service docker restart
        

        我还使用了以下有用的命令来调查问题:

        # List networks (it should have 3 lines bridge, host, none)
        docker network ls
        
        # Check the logs, it will have docker log
        journalctl -xe
        
        # This one showed me at the end that bridge was missing iptables config like below
        # WARNING: bridge-nf-call-iptables is disabled
        # WARNING: bridge-nf-call-ip6tables is disabled
        docker info
        

        【讨论】:

          【解决方案6】:

          一个简单的方法是把nslookup archive.ubuntu.com的IP写入/etc/hosts,然后重启docker。

          当然它需要你的 docker 的 /etc/docker/daemon.json 使用主机的 IP。

          【讨论】:

            【解决方案7】:

            概述
            您的问题分为两部分:
            1. 修复临时解决消息
            2. 修复包管理问题

            临时解决
            这个问题很可能是:
            1. 由于您的 Internet 服务提供商未将 Internet 命名 (DNS) 正确转发到其或外部 DNS 服务器,或
            2. 由于您的网络发生了变化,类似地阻止了此命名 - 例如,新路由器/调制解调器,使用新配置重新配置交换机。

            让我们看看可能的 DNS 解析问题。

            首先,暂时将一个已知的 DNS 服务器添加到您的系统中。

            echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
            

            然后运行sudo apt update。

            如果这修复了您的临时解决消息,那么请等待 24 小时,看看您的 ISP 是否为您解决了问题(或只是联系您的 ISP) - 或者您可以将 DNS 服务器永久添加到您的系统:

            echo "nameserver 8.8.8.8" | sudo tee /etc/resolvconf/resolv.conf.d/base > /dev/null
            

            8.8.8.8 是 Google 自己的 DNS 服务器。

            source

            您可以使用的另一个示例 DNS 服务器是 OpenDNS- 例如:

            echo "nameserver 208.67.222.222" | sudo tee /etc/resolvconf/resolv.conf.d/base > /dev/null
            

            包管理问题

            除了临时解决问题 - 您还有一些需要纠正的包管理问题。
            打开终端并输入:-

            sudo nano /etc/apt/sources.list 
            

            看看你是否从正确的源包下载。

            或

            如果您使用代理,请使用 -E。例如:-
            sudo -E apt-get update

            【讨论】:

              猜你喜欢
              • 2019-10-19
              • 1970-01-01
              • 2019-10-29
              • 2021-01-22
              • 2018-04-06
              • 1970-01-01
              • 1970-01-01
              • 2019-12-22
              • 1970-01-01
              相关资源
              最近更新 更多