Persist ENV в многоэтапной сборке докера - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть Dockerfile, указывающий многоступенчатую сборку, подобную этой:

FROM python:2.7.15-slim-jessie
RUN pip install devpi-client --index https://pypi.org/simple --proxy=myproxy.com
RUN devpi use http://proxyip/root/internal --set-cfg
ENV HTTP_PROXY="http://myproxy.com"
ENV HTTPS_PROXY="http://myproxy.com"


FROM sentry:9.0-onbuild

RUN apt-get -qq update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q libxslt1-dev libxml2-dev libpq-dev libldap2-dev libsasl2-dev libssl-dev

COPY sentry.conf.py /etc/sentry/sentry.conf.py

COPY requirements.txt /tmp/

RUN pip install -r /tmp/requirements.txt

# cleanup
RUN apt-get remove -y -q libxslt1-dev libxml2-dev libpq-dev libldap2-dev libsasl2-dev libssl-dev
RUN rm -rf /var/lib/apt/lists/*
RUN rm /tmp/requirements.txt

`

Этап, который наследуется от sentry:9.0-onbuild, имеет команды pip, которые не выполняются во время сборки после ENVНастройка прокси для сервера pypi содержится на предыдущем этапе сборки.Есть ли способ сохранить эту настройку ENV, чтобы команды, указанные в sentry:9.0-onbuild не перестали

1 Ответ

0 голосов
/ 29 ноября 2018

Есть ли способ сохранить эту настройку ENV [на всех этапах сборки]

Нет, нет.

Опция может включать в себя паруARG:

ARG HTTP_PROXY=http://myproxy.com
ENV $HTTP_PROXY

ARG HTTPS_PROXY=https://myproxy.com
ENV $HTTPS_PROXY

на каждом этапе.Не очень элегантно, но это позволит вам передать --build-arg HTTP_PROXY=http://whatever.com и т. Д. В командной строке, только один раз, и это будет установлено для всех этапов.


Еще одна возможность, вы можете скопировать файл изВаш хост с этими значениями определен:

# proxy.env
HTTP_PROXY=http://myproxy.com
HTTPS_PROXY=https://myproxy.com

И просто source это по мере необходимости на каждом этапе:

FROM sentry:9.0-onbuild
RUN source proxy.env && apt-get -qq update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q libxslt1-dev libxml2-dev libpq-dev libldap2-dev libsasl2-dev libssl-dev

Также довольно уродливо, но, по крайней мере, вы могли бы сохранить значения согласованнымиопределив их где-то один раз, файл будет в VCS, и вам не придется дурачиться с передачей --build-arg каждой сборки.

...