Запустите apt-get с прокси в Dockerfile

Я за прокси, мне нужно что-то установить через 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=

Дело в том, что мне нужно потом сбросить эти переменные окружения.

Есть идеи, как сделать это менее чем за 5 слоев?

2 ответа

Решение

Вам нужно использовать переменные времени сборки (–build-arg).

Этот флаг позволяет передавать переменные времени сборки, к которым обращаются, как к обычным переменным среды, в инструкции RUN Dockerfile. Кроме того, эти значения не сохраняются в промежуточных или конечных изображениях, как значения ENV.

Так что ваши Dockerfile всего 3 строчки:

ARG http_proxy
ARG https_proxy
RUN apt-get update -y && apt-get -y install ...

И вам просто нужно определить переменные времени сборки http_proxy и / или https_proxy во время построения изображения:

$ docker build --build-arg http_proxy=http://<proxy_ip>:<proxy_port> --build-arg https_proxy=https://<proxy_ip>:<proxy_port> . 

Используя также переменные времени сборки (–build-arg), вы можете добавить в начале (до apt-get update) подходящая конфигурация прокси:

...
ARG APT_PROXY
RUN echo "Acquire::http::Proxy \"$APT_PROXY\";" | tee /etc/apt/apt.conf.d/01proxy
RUN apt-get update -y && apt-get -y install ...
...

Это полезно в сценарии, в котором вы хотите кэшировать пакеты только из хранилищ APT

Другие вопросы по тегам