在 dockerfile 中配置 alpine 的代理

yux*_*uxh 7 docker dockerfile

我使用 mvn clean package docker:build 来调用机器 B 中的 dockerfile(docker version 18.03.1-ce ):

FROM openjdk:8-jdk-alpine
RUN  apk update && apk upgrade && apk add netcat-openbsd && apk add curl
Run Code Online (Sandbox Code Playgroud)

事实证明:

Step 2/8 : RUN  apk update && apk upgrade && apk add netcat-openbsd && apk add curl

     ---> Running in 89c9b97b9d75
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
    fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
    ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.7/main: temporary error (try again later)
    WARNING: Ignoring APKINDEX.70c88391.tar.gz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我发现这是网络问题,机器B通过机器A访问互联网,我尝试在 /etc/docker/daemon.json 中添加“dns”,在 ~/.docker/config.json 中添加“httpProxy”,现在我成功运行:

`docker run -it cc2179b8f042`
apk update
Run Code Online (Sandbox Code Playgroud)

但是当我回来使用maven调用dockfile时,它不起作用。那么我怎样才能使码头文件工作并告诉我这两种情况之间的任何区别。

小智 8


\n\n

看来您需要http_proxy在 Dockerfile 中进行设置。如果您这样做(例如,出于特定的临时原因 - 假设您正在公司代理后面构建容器)并且随后不再需要它,我会建议如下所示:

\n\n
RUN export \\\n  http_proxy="http://some.custom.proxy:8080/\xe2\x80\x9d \\\n  https_proxy="https://some.custom.proxy:8080/" \\\n  \\\n  && < E.G. pip install requirements.txt> \\\n  \\\n  && unset http_proxy https_proxy\n
Run Code Online (Sandbox Code Playgroud)\n\n

您还可以通过调用在 Dockerfile 中使用更永久的解决方案ENV,但请注意,这些解决方案是持久的,如果您将映像推送/部署到其他地方,可能会导致进一步的问题 -参考

\n