如果我想构建我的 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。
提前致谢
使用以下命令检查主机上可用的网络:
docker network ls
然后选择一个您认为有效的,
host
可能是一个不错的候选者。
现在假设您位于
Dokerfile
可用的目录中,构建附加标志 --networks
的图像,并将 <image-name>
更改为您的:
docker build . -t <image-name> --no-cache --network=host
Docker 似乎确实存在一些网络问题。我设法解决了这个问题
systemctl restart docker
...这基本上只是 Debian 8 中的 unix 级别的“restart-the-daemon”命令。
我也有类似的问题。但当我运行 AWS linux 时,我没有 systemctl。我解决了使用:
sudo service docker restart
我的 docker 构建在尝试运行
apt-get upgrade
时也失败了,并出现完全相同的错误。我在 Mac OSX 上使用 docker-machine,一个简单的 docker-machine restart default
解决了这个问题。但不知道最初是什么导致了这种情况。
上述行为的另一个案例 - 这次从 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 网络……
我对树莓派也有同样的问题。
启动/停止服务没有帮助,但重新安装软件包(在我的例子中是
dpkg -i docker-hypriot_1.10.3-1_armhf.deb && service docker start
)立即解决了问题:apt-get update
设法解决并到达服务器。
安装过程中肯定有一些一次性操作...
今天也面临同样的问题。我的解决方法是重新启动你的 docker 机器。就我而言,它处于
VirtualBox
。
一旦你关闭电源然后重新启动机器,
http://security.debian.org
似乎解决了。
希望这有帮助。
对于那些使用 Docker compose 的人:
services:
web:
build:
context: .
dockerfile: ./Dockerfile
# the line below fixes the network access
network: host
一些建议,不确定是否有效。可以把
...apt-get install -y...
改成...apt-get install -yqq...
吗
另外,您尝试构建的图像是否已更改?