【问题标题】:Docker build has no network, but docker run hasDocker build 没有网络,但是 docker run 有
【发布时间】:2015-10-24 03:37:20
【问题描述】:

如果我想构建我的 Dockerfile,它无法连接到网络或至少 DNS:

Sending build context to Docker daemon 15.95 MB
Sending build context to Docker daemon 
Step 0 : FROM ruby
 ---> eeb85dfaa855
Step 1 : RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
 ---> Running in ec8cbd41bcff
W: Failed to fetch http://httpredir.debian.org/debian/dists/jessie/InRelease  

W: Failed to fetch http://httpredir.debian.org/debian/dists/jessie-updates/InRelease  

W: Failed to fetch http://security.debian.org/dists/jessie/updates/InRelease  

W: Failed to fetch http://httpredir.debian.org/debian/dists/jessie/Release.gpg  Could not resolve 'httpredir.debian.org'

W: Failed to fetch http://httpredir.debian.org/debian/dists/jessie-updates/Release.gpg  Could not resolve 'httpredir.debian.org'

W: Failed to fetch http://security.debian.org/dists/jessie/updates/Release.gpg  Could not resolve 'security.debian.org'

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 build-essential
INFO[0001] The command "/bin/sh -c apt-get update -qq && apt-get install -y build-essential libpq-dev" returned a non-zero code: 100

但如果我通过docker run 运行完全相同的命令,它就可以工作:

docker run --name="test" ruby /bin/sh -c 'apt-get update -qq && apt-get install -y build-essential libpq-dev'

有人知道,为什么docker build 不起作用?我已经在 StackOverflow 上尝试了所有与 DNS 相关的提示,例如使用 --dns 8.8.8.8 等启动 docker。

提前致谢

【问题讨论】:

  • 我应该提一下,几周前完全相同的 Dockerfile 已经工作了。
  • 我遇到了同样的问题。你解决过这个问题吗?
  • 不.. 不在这台机器上:(

标签: build dns docker apt-get


【解决方案1】:

一些建议,不确定它们是否有效。能不能把...apt-get install -y...改成...apt-get install -yqq...

另外,您尝试构建的图像是否发生了变化?

【讨论】:

  • -yqq 没有解决问题。此外,它在 apt-get 更新时失败,甚至没有到达 apt-get 安装。图像可能已更改,但由于具有完全相同基本图像的docker run 有效,我认为问题与图像无关。
【解决方案2】:

我的 docker build 在尝试运行 apt-get upgrade 时也失败了,错误完全相同。我在 Mac OSX 上使用 docker-machine,一个简单的docker-machine restart default 解决了这个问题。不过,不知道最初是什么原因造成的。

【讨论】:

    【解决方案3】:

    我对覆盆子也有同样的问题。

    启动/停止服务没有帮助,但重新安装包(在我的情况下为dpkg -i docker-hypriot_1.10.3-1_armhf.deb && service docker start)立即解决了这种情况:apt-get update 设法解决并到达服务器。

    安装过程中一定有一些一次性动作...

    【讨论】:

      【解决方案4】:

      Docker 肯定有一些网络问题。我设法解决了这个问题

      systemctl restart docker

      ...这基本上只是 Debian 8 中的 unix 级“restart-the-daemon”命令。

      【讨论】:

      • 这解决了我的问题,我有 docker 1.12.0,我认为这是操作系统问题或者它可能是什么?
      【解决方案5】:

      上述行为的另一个案例——这次是从 Jenkins 构建一个 docker 镜像:

      [...] 第 3 步:运行 apt-get update && apt-get install -y curl libapache2-mod-proxy-html ---> 在 ea7aca5dea9b 中运行

      错误http://security.debian.orgjessie/更新InRelease

      错误http://security.debian.orgjessie/updates Release.gpg

      无法解析“security.debian.org” 错误http://httpredir.debian.org jessie InRelease [...]

      在我的情况下,事实证明无法从容器内访问 DNS - 但仍可从 docker 主机访问!? (容器解析器配置没问题(!)) 重新启动 docker 机器后(完全重新启动 - 'docker.service restart' 没有成功)它又开始工作了。 因此,我的一项活动(或我的一位同事)一定破坏了 docker 网络!??也许是一些防火墙修改活动???

      我仍在调查,因为我不确定哪个活动可能破坏了 docker 网络......

      【讨论】:

        【解决方案6】:

        我有类似的问题。但是当我运行 AWS linux 时,我没有 systemctl。我解决了:

        sudo service docker restart
        

        【讨论】:

          【解决方案7】:

          今天也遇到了同样的问题。我的解决方法是重新启动您的 docker-machine。就我而言,它位于VirtualBox

          关闭电源然后重新启动机器后,http://security.debian.org 似乎已解决。

          希望这会有所帮助。

          【讨论】:

            【解决方案8】:

            使用以下命令检查主机上可用的网络:

            docker network ls
            

            然后选择一个您知道有效的,host 可能是一个不错的候选者。

            现在假设您在您的Dokerfile 可用的目录中,构建您的图像并附加标志--networks 并将<image-name> 更改为您的:

            docker build . -t <image-name> --no-cache --network=host
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-05-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-11-08
              • 2020-12-23
              • 2015-08-14
              相关资源
              最近更新 更多