Dockerfile无法构建

时间:2017-06-30 08:51:59

标签: docker dockerfile

直到几天前,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

6 个答案:

答案 0 :(得分:2)

您的RUN指令中看起来有连接错误。

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

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

在我的机器上,您的脚本可以正常工作。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

<强> 概述
你的问题分为两部分:
 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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

对我有用的解决方案是

  1. 检查我的主机/etc/resolv.conf-寻找名称服务器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守护程序-sudo service docker restart

随着时间的流逝,我(在家中)的名称服务器发生了变化,所以我有几个,或者我不时要添加到该文件中。如果您在其他地方使用Internet,它也可能会发生变化-因此,这并不总是最好的解决方案。

答案 5 :(得分:0)

就我而言,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