如何从 docker build 中获取工件?

Sto*_*row 5 docker docker-build

有没有办法将工件从docker build主机中取出?

例如,鉴于以下内容Dockerfile,有没有办法获取文件log.log

FROM alpine:3.7 as base
RUN mkdir /log/
RUN touch /log/log.log
Run Code Online (Sandbox Code Playgroud)

我尝试使用COPY似乎只能主机复制docker 镜像:

FROM alpine:3.7 as base
RUN mkdir /log/
RUN touch /log/log.log
COPY ./foo.bar /log/
RUN ls -l /log/
COPY /log/log.log ./
Run Code Online (Sandbox Code Playgroud)
$ touch ./foo.bar && docker build -t demo --no-cache .
Sending build context to Docker daemon  15.36kB
Step 1/6 : FROM alpine:3.7 as base
 ---> 6d1ef012b567
Step 2/6 : RUN mkdir /log/
 ---> Running in 4b6df3797ee3
Removing intermediate container 4b6df3797ee3
 ---> 827e6001d34a
Step 3/6 : RUN touch /log/log.log
 ---> Running in d93d50d61b69
Removing intermediate container d93d50d61b69
 ---> c44620d4f9c4
Step 4/6 : COPY ./foo.bar /log/
 ---> 6996718d44da
Step 5/6 : RUN ls -l /log/
 ---> Running in 84e997af182b
total 0
-rw-r--r--    1 root     root             0 Nov  8 21:44 foo.bar
-rw-r--r--    1 root     root             0 Nov  8 21:44 log.log
Removing intermediate container 84e997af182b
 ---> 5a440f258772
Step 6/6 : COPY /log/log.log ./
COPY failed: stat /var/lib/docker/tmp/docker-builder677155266/log/log.log: no such file or directory
Run Code Online (Sandbox Code Playgroud)

我知道-v(volume mount) 参数docker run- 但这不是我要找的:我想了解是否有办法从docker build流程中获取工件。


更新: RE:@ChristianFosli 的使用建议docker cp:该解决方案需要一个 docker容器。但是,就我而言,我希望在此docker build过程中专门提取文件的原因是我Dockerfile运行了一个失败的可执行文件,因此我没有可以作为容器运行的映像,我可以在其上执行docker cp. 即,我想从docker build进程中提取的文件是一个元数据文件,其中包含我想检查的有关故障的调试信息。

Chr*_*sli 2

您可以使用 将文件从容器复制到本地文件系统docker cp

检查文档了解详细信息

我不知道直接从 docker 映像复制文件的方法,但您可以使用docker create基于您的映像创建一个容器,而无需运行它,然后使用docker cp.