docker - 在多阶段 docker 构建中保留 ENV

标签 docker sentry

我有一个指定多阶段构建的 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 命令在构建期间会失败,因为 pypi 服务器代理的 ENV 设置包含在前一个构建阶段中。有没有办法保留此 ENV 设置,以便 sentry:9.0-onbuild 中指定的命令不会失败

最佳答案

Is there a way to persist this ENV setting [across build stages]

不,没有。

一个选项将包含一对 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

并且只需在每个阶段根据需要即可:

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 每个构建。

关于docker - 在多阶段 docker 构建中保留 ENV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53541362/

相关文章:

.net - ASP.NET Sentry 配置

docker - Circle CI 2. Sentry-cli找不到查找dist文件夹以上传源 map

node.js - Docker中用于Express.js服务器的Nginx反向代理

postgresql - 如何在 docker-compose up 上注册一个 Postgres 容器主机?

docker - 无法从主机连接到docker端口

python - 使用 SUDS Python WSDL 客户端和 Django Sentry,带有 __sentry__ 属性的异常

javascript - 在使用 grunt usemin 和 rev 时使用 SourceMaps Uglify

Dockerfile 环境变量

docker - Golang 构建所有下载的包

docker - 使docker-compose运行唯一的链接容器