考虑以下 docker 构建上下文:

src/
  hi
  there
  bye

和 Dockerfile:
FROM ubuntu

RUN mkdir test
COPY src/hi src/there test/

这工作得很好,但我想制作文件列表以复制 ARG ,例如:
FROM ubuntu

ARG files

RUN mkdir test
COPY ${files} test/

不幸的是,使用 docker build --build-arg files='src/hi src/there' some_path 调用失败,因为它将 src/hi src/there 视为单个项目。如何将 files 参数“扩展”到多个文件中进行复制?

一时兴起,我尝试多次指定文件 arg: docker build --build-arg files='src/hi' --build-arg files='src/there' some_path ,但这只会复制“那里”。

最佳答案


考虑到 Dockerfile format 提到的论点,这似乎不太可能:

这不仅限于 RUN
然而, COPY 还包括:

在你的情况下它不起作用。
保留 multi-stage builds approach

  • COPY src(所有文件夹)
  • 删除您不想要的所有内容:
    RUN find pip ${files} -maxdepth 1 -mindepth 1 -print | xargs rm -rf
    
  • 根据第一个图像的结果状态构建您的实际图像。

  • 您可以将要保留的文件夹作为一个参数传递
    docker build --build-arg="files=! -path "src/hi" ! -path "src/there"" .
    
    请参阅“Docker COPY files using glob pattern? ”中的示例。

    关于docker - 将ARG中的多个文件指定为Dockerfile中的COPY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61599384/

    10-16 10:09