是否有办法将工件从docker build
传送到主机?
作为示例,给定以下Dockerfile
,是否可以获取文件log.log
?
FROM alpine:3.7 as base
RUN mkdir /log/
RUN touch /log/log.log
我尝试使用COPY
似乎只能将从主机复制到码头工人镜像:
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 ./
$ 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
我知道-v
的{{1}}(卷装入)参数-但这不是我想要的:我正在寻找是否有办法从中获取工件不属于docker run
流程。
更新:RE:@ChristianFosli建议使用docker build
:该解决方案需要一个docker 容器。但是,就我而言,我要专门在docker cp
过程中提取文件的原因是我的docker build
运行了一个失败的可执行文件,因此我没有可以作为容器运行的映像我可以执行Dockerfile
。即我想从docker cp
流程中提取的文件是一个元数据文件,其中包含我要检查的有关故障的调试信息。
答案 0 :(得分:1)
您可以使用docker cp
将文件从容器复制到本地文件系统。
我不知道从docker映像直接复制文件 的方法,但是您可以基于映像创建容器,而无需运行它,docker create和然后使用docker cp
从文件中复制文件。