Lui*_*uis 6 copy docker dockerfile
考虑以下 docker 构建上下文:
src/
hi
there
bye
Run Code Online (Sandbox Code Playgroud)
和 Dockerfile:
FROM ubuntu
RUN mkdir test
COPY src/hi src/there test/
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我想制作要复制的文件列表ARG
,例如:
FROM ubuntu
ARG files
RUN mkdir test
COPY ${files} test/
Run Code Online (Sandbox Code Playgroud)
不幸的是,调用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
,但这只会复制“那里”。
几年后我再次遇到这个问题,但现在找到了一个足够的解决方案,假设这些文件可以分为一组固定的类别。
答案基本上是使用 glob 模式结合 Docker COPY 文件的答案?和https://unix.stackexchange.com/questions/59112/preserve-directory-struct-when-moving-files-using-find
从概念上讲,其想法是在一个阶段中分离文件组,然后逐个复制每个组(或忽略它)。
在代码中:
# Create dummy stage for splitting up files
FROM ubuntu as src
RUN mkdir /groups
WORKDIR /groups
RUN mkdir group1 group2
# Makes `group2` the de-facto default, can be any though
COPY src group2
RUN rsync --recursive --remove-source-files --prune-empty-dirs \
--include='hi' \
--include='there' \
--exclude='*' \
group2/ group1/
# Create the image we actually care about
FROM ubuntu
COPY --from=src /groups/group1 test/
RUN commands requiring only `group1` files
COPY --from=src /groups/group2 test/
RUN commands requiring all files
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2520 次 |
最近记录: |