gpt4 book ai didi

docker - 将ARG中的多个文件指定为Dockerfile中的COPY

转载 作者:行者123 更新时间:2023-12-02 18:05:36 26 4
gpt4 key购买 nike

考虑以下 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 ,但这只会复制“那里”。

最佳答案

because it treats src/hi src/there as a single item.
How can I "expand" the files argument into multiple files to copy?


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

whitespace in instruction arguments, such as the commands following RUN, are preserved


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

Each <src> may contain wildcards and matching will be done using Go’s filepath.Match rules.


在你的情况下它不起作用。
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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com