Docker代理配置不适用于Dockerfile中的ADD

时间:2019-02-08 19:33:53

标签: docker proxy dockerfile

我尝试编写一个Dockerfile,将一个文件添加到图像中,如下所示:

subset_high_hp <- function(full_table, df_name) {
  sub_df <- full_table %>% 
    filter(hp > 200)

  assign(x = df_name, value = sub_df, envir = globalenv())
}

subset_high_hp(full_table = mtcars, df_name = "mtcars_highhp")
mtcars_highhp

   mpg cyl disp  hp drat    wt  qsec vs am gear carb
1 14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
2 10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
3 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
4 14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
5 13.3   8  350 245 3.73 3.840 15.41  0  0    3    4
6 15.8   8  351 264 4.22 3.170 14.50  0  1    5    4
7 15.0   8  301 335 3.54 3.570 14.60  0  1    5    8

ADD https://repository.internal/file.zip /tmp/ 主机只能通过代理访问。我为代理配置提供了repository.internal选项,但是--config命令似乎不使用代理并且失败了。

我知道代理配置正确,因为我添加了

ADD

工作正常。

是否还可以通过代理配置运行RUN curl https://repository.internal/file.zip 命令?

1 个答案:

答案 0 :(得分:1)

根据我上面的评论,我相信这与Docker构建过程处理ADDRUN命令的内部方式有关……无法找到支持该文档的文档-因此具有较高内部知识的人可能会确认或拒绝,但是在构建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文件,我就记不起我的头了。

正如您所提到的,这将依赖于映像上可用的curlunzip软件包...但是,通过使用{{3},您可以避免将它们包含在最终应用程序映像中}

您的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

这将利用映像中的curlunzip来收集和处理文件的提取,而不必将它们安装在最终的应用程序映像上。