curl 在 docker 构建期间不起作用

M. *_*oes 5 curl linux-mint docker dockerfile

我正在编写一个基于 Wildfly 图像的 Dockerfile。我已经隔离了这些让我感到头疼的线路。该卷曲命令在构建过程中不起作用。我已经卸载并再次安装了 Docker,但错误仍然存​​在。我的系统是 Linux Mint。此外,我尝试在 RHEL 中构建相同的 Dockerfile,它的效果非常好。

这是 Dockerfile:

FROM jboss/wildfly

RUN cd $HOME \
    && curl -O "http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.44/mysql-connector-java-5.1.44.jar"
Run Code Online (Sandbox Code Playgroud)

这是错误输出:

Sending build context to Docker daemon   1.03MB
Step 1/6 : FROM jboss/wildfly
 ---> b695bdcce374
Step 2/6 : RUN cd $HOME     && curl -O "http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.44/mysql-connector-java-5.1.44.jar"
 ---> Running in 4fdcef7dbda1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:39 --:--:--     0
  curl: (6) Could not resolve host: central.maven.org; Unknown error
The command '/bin/sh -c cd $HOME     && curl -O "http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.44/mysql-connector-java-5.1.44.jar"' returned a non-zero code: 6
Run Code Online (Sandbox Code Playgroud)

fre*_*hop 0

该错误是解析主机名的 DNS 问题。您可以尝试使用 --dns 选项运行 docker ( https://docs.docker.com/engine/reference/run/#network-settings )

docker run --dns=8.8.8.8
Run Code Online (Sandbox Code Playgroud)

这将为您设置容器 /etc/resolv.conf。

  • 问题是关于“docker build”阶段发生的 DNS 问题,而不是“docker run”阶段。为了影响构建过程中使用的 DNS 服务器,必须将整个守护进程设置为具有有效的 DNS 系统。这意味着主机的 /etc/resolv.conf 应包含整个系统(包括容器(和构建步骤))使用的正确 DNS 服务器。如果系统的 /etc/resolv.conf 确实不适合容器,则可以通过在 /etc/docker/daemon.json 中设置将整个守护进程配置为使用不同的 DNS 服务器。 (2认同)