使用 Ubuntu 16.04 和 docker 18.03.1-ce
在 Dockerfile 中,我有:
RUN curl -k -o app.jar -kfSL https://mynexus:9006/repository/legacy/1.0.2/app.jar
但是当我用:
sudo docker build -t myimage .
我得到:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: mynexus
The command '/bin/sh -c curl -k -o app.jar -kfSL https://mynexus:9006/repository/legacy/1.0.2/app.jar' returned a non-zero code: 6
如果我从终端运行完全相同的命令行,它可以正常工作:
$ curl -k -o app.jar -kfSL https://mynexus:9006/repository/legacy/1.0.2/app.jar
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3613k 100 3613k 0 0 1413k 0 0:00:02 0:00:02 --:--:-- 1413k
为什么我可以从命令行卷曲该文件,而不能从 DockerFile 卷曲该文件?
使用 curl命令从构建中运行最后一个提交的映像时,可以看到 curl 错误消息:
docker run -it --rm lastCommitedImageHash curl -k -o app.jar -kfSL https://mynexus:9006/repository/legacy/1.0.2/app.jar
上周我遇到了同样的问题 - curl 直接从主机工作,但在从 Dockerfile 构建期间运行时则不工作。
重新启动 Docker 守护程序对我有帮助。
我还没有找到那种状态的原因是什么。它在机器上也是作为 Kubernetes 主站的,我上周做了 Kubernetes 集群升级,这可能是这个问题的根源。
在您的情况下,该问题的另一个原因可能是,如果您仅在主机上的/etc/hosts文件中定义了mynexus主机名,然后在构建期间对于正在运行的容器是未知的。