我有一个Dockerfile指定了这样的多阶段构建:
@tf.contrib.eager.defun
def func(tensors):
y, idx = tf.unique(tensors) #, dtype=tf.int32)
return tf.size(y)
un_3 = tf.map_fn(func, un_2, infer_shape=False)
`
从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
继承的阶段具有pip命令,该命令在构建期间失败,因为pypi服务器的代理的ENV设置包含在先前的构建阶段中。有没有办法保留此ENV设置,以使sentry:9.0-onbuild
中指定的命令不会失败
答案 0 :(得分:2)
是否有一种方法可以在整个构建阶段中保持该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
而傻瓜。