我尝试编写一个Dockerfile,它将一个文件添加到图像中,如下所示:
ADD https://repository.internal/file.zip /tmp/repository.internal主机只能通过代理访问。我为代理配置提供了--config选项,但是ADD命令似乎没有使用代理,但失败了。
我知道代理配置是正确的,因为我添加了行
RUN curl https://repository.internal/file.zip效果很好。
是否有可能同时使用代理配置运行ADD命令?
发布于 2019-02-09 14:42:51
根据我上面的评论,我认为这与Docker构建过程处理ADD和RUN命令的内部方式有关.我找不到文档来支持这一点--因此,具有更多内部知识的人可能会确认或否认,但这是有意义的,因为RUN命令是在正在构建的映像的一个层中执行的,在该层执行ADD命令并将其结果烘焙到图像中。
无论以何种方式处理这一问题,您都可以通过移动到RUN方法实现所需的目标,如下所示:
FROM <your base image>
RUN curl https://repository.internal/file.zip >> /tmp/file.zip \
&& cd /tmp \
&& unzip file.zip \
&& rm file.zip你会把文件解压缩。
您可能需要检查是否需要在末尾的rm -如果unzip命令删除了原始的zip文件,您就记不起来了。
正如您所提到的,这将依赖于映像上可用的curl和unzip包.但是,通过使用码头多阶段建设,您可能会避免在最终的应用程序映像中使用这些
然后,您的Dockerfile将类似于:
FROM <some useful base image> as collector
RUN apt-get install -y curl unzip
RUN mkdir /tmp/files && \
&& curl https://repository.internal/file.zip >> /tmp/files/file.zip \
&& cd /tmp/files \
&& unzip file.zip \
&& rm file.zip
FROM <your final desired base image>
COPY --from=collector /tmp/files /tmp然后,这将使用包含curl和unzip的映像来收集和处理提取的文件,而不必将它们安装到最终的应用程序映像中。
https://stackoverflow.com/questions/54599086
复制相似问题