Docker构建没有网络,但docker运行有吗?

30

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

提前致谢


1
我应该提到,完全相同的 Dockerfile 几周前是可以工作的。 - sweiler
我也遇到了同样的问题。你解决了吗? - wintersylf
这台机器上没有哦 :( - sweiler
8个回答

34

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

docker network ls

选择一个已知可用的,host 可能是个好选择。

现在假设您在可用 Dockerfile 的目录中,在构建镜像时附加标志 --networks 并将 <image-name> 替换为您自己的:

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

17

Docker似乎确实存在一些网络问题。我通过执行

systemctl restart docker

来解决这个问题,这基本上只是在Debian 8中重启守护进程的Unix级命令。


这解决了我的问题,我有docker 1.12.0,我认为这可能是操作系统的问题,或者还有其他原因吗? - kurkop
这解决了我的问题,谢谢!(Ubuntu 20.04 主机) - ViktorNova

7

我曾经遇到类似的问题。但是,因为我使用的是AWS Linux,没有systemctl命令。我解决了这个问题:

sudo service docker restart

2

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

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

错误 http://security.debian.org jessie/updates InRelease

错误 http://security.debian.org jessie/updates Release.gpg

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

在我的情况下,结果表明容器内部无法访问DNS,但从docker主机仍然可以访问!?(容器的解析器配置正确!) 重新启动docker机器(完全重新启动-“docker.service restart”没有起作用),它又开始工作了。 那么我或我的同事之一的活动一定破坏了docker网络!?也许是某些firewalld修改活动吗?

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


2
我的Docker构建也在尝试运行apt-get upgrade时失败,出现完全相同的错误。我正在Mac OSX上使用docker-machine,简单的docker-machine restart default解决了这个问题。不知道最初是什么原因导致的。

0
今天我也遇到了同样的问题。我的解决方法是重新启动你的docker-machine,对于我来说,它在VirtualBox上。
一旦你把它关闭然后重新启动机器,http://security.debian.org 似乎得到了解决。
希望这可以帮助到你。

0

我在树莓派上遇到了完全相同的问题。

启动/停止服务没有帮助,但重新安装软件包(在我的情况下为dpkg -i docker-hypriot_1.10.3-1_armhf.deb && service docker start)立即解决了这个问题:apt-get update能够解析和访问服务器。

安装过程中必须有一些一次性操作...


-2
一些建议,不确定是否有效。您能否将...apt-get install -y...更改为...apt-get install -yqq...
此外,您正在构建的镜像是否已更改?

-yqq并没有解决这个问题。同时它在apt-get update时失败了,甚至无法到达apt-get install。镜像可能已经改变,但由于使用完全相同的基础镜像进行docker run可以正常工作,我认为问题与镜像无关。 - sweiler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接