在 Dockerfile 中使用代理运行 apt-get

Kaz*_*azz 2 proxy environment-variables aptitude docker

我在代理后面,我需要通过安装一些东西apt-get

我带来的最好的就是这个

ARG PROXY
ENV http_proxy=$PROXY
ENV https_proxy=$PROXY
RUN apt-get update -y && apt-get -y install ...
ENV http_proxy=
ENV https_proxy=
Run Code Online (Sandbox Code Playgroud)

问题是我之后需要取消设置这些环境变量。

知道如何在少于 5 层的时间内做到这一点吗?

Nic*_*lay 6

您需要使用构建时变量(\xe2\x80\x93build-arg)。

\n\n

该标志允许您传递构建时变量,这些变量像 Dockerfile 的 RUN 指令中的常规环境变量一样被访问。此外,这些值不会像 ENV 值一样保留在中间或最终图像中。

\n\n

所以,你的Dockerfile只有 3 行:

\n\n
ARG http_proxy\nARG https_proxy\nRUN apt-get update -y && apt-get -y install ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

您只需要定义构建时变量http_proxy和/或https_proxy在图像构建期间:

\n\n
$ docker build --build-arg http_proxy=http://<proxy_ip>:<proxy_port> --build-arg https_proxy=https://<proxy_ip>:<proxy_port> . \n
Run Code Online (Sandbox Code Playgroud)\n

  • http_proxy 和 https_proxy 是预定义的构建参数,无需为它们编写 ARG。请参阅 https://docs.docker.com/engine/reference/builder/#predefined-args +1 因为可以在不破坏 docker 缓存的情况下更改代理 - 但要小心,wget、curl...也可以使用这个变量 (4认同)