docker - 在 Dockerfile 中指定 ARG 中的多个文件到 COPY
问题描述
考虑以下 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
,但这只会复制“那里”。
解决方案
因为它被视为
src/hi src/there
单个项目。
如何将 files 参数“扩展”为要复制的多个文件?
考虑到Dockerfile 格式提到的参数,这似乎不太可能:
指令参数中的空格,例如后面的命令
RUN
,被保留
而这不仅限于RUN
.
COPY
但是,还包括:
每个都
<src>
可能包含通配符,并且将使用 Go 的filepath.Match
规则进行匹配。
它不适用于您的情况。
保持多阶段构建方法
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"" .
请参阅“使用 glob 模式的DockerCOPY
文件?”中的示例。
推荐阅读
- c++ - 如何修复这些编码?
- python - 找不到页面:没有 CustomUser 匹配给定的查询
- python - 如何使用 matplotlib 从 pandas 数据框中绘制条形图
- java - & 在到达 Java 端点时转义为 &
- python - 非相关修复错误,使用 Guizero 使用 Python 构建的小游戏
- c# - WPF 数据网格到 XML
- amazon-web-services - AWS S3 重定向规则不允许我保存它
- python - 使用 Rasterio 和 Geopandas 显示感兴趣区域的光谱
- ios - JSON解码器Swift的潜在错误
- node.js - 连接 Aurora MySQL 时出现 ENOTFOUND 错误