Docker build 没有网络,但是 docker run 有网络

问题描述 投票:0回答:9

如果我想构建我的 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。

提前致谢

build dns docker apt-get
9个回答
38
投票

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

docker network ls

然后选择一个您认为有效的,

host
可能是一个不错的候选者。

现在假设您位于

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

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

17
投票

Docker 似乎确实存在一些网络问题。我设法解决了这个问题

systemctl restart docker

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


7
投票

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

sudo service docker restart

2
投票

我的 docker 构建在尝试运行

apt-get upgrade
时也失败了,并出现完全相同的错误。我在 Mac OSX 上使用 docker-machine,一个简单的
docker-machine restart default
解决了这个问题。但不知道最初是什么导致了这种情况。


2
投票

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

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

错误http://security.debian.orgjessie/updates 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 网络……


0
投票

我对树莓派也有同样的问题。

启动/停止服务没有帮助,但重新安装软件包(在我的例子中是

dpkg -i docker-hypriot_1.10.3-1_armhf.deb && service docker start
)立即解决了问题:
apt-get update
设法解决并到达服务器。

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


0
投票

今天也面临同样的问题。我的解决方法是重新启动你的 docker 机器。就我而言,它处于

VirtualBox

一旦你关闭电源然后重新启动机器,

http://security.debian.org
似乎解决了。

希望这有帮助。


0
投票

对于那些使用 Docker compose 的人:

services:
    web:
        build:
            context: .
            dockerfile: ./Dockerfile
            # the line below fixes the network access
            network: host

-2
投票

一些建议,不确定是否有效。可以把

...apt-get install -y...
改成
...apt-get install -yqq...

另外,您尝试构建的图像是否已更改?

© www.soinside.com 2019 - 2024. All rights reserved.