Docker将文件从dockerfile复制到主机

Jam*_*aix 9 docker

我正在写一个Dockerfile构建应用程序.我知道您可以手动将文件从容器中复制出来

docker cp <containerId>:/file/path/within/container /host/path/target
Run Code Online (Sandbox Code Playgroud)

(请参阅将文件从Docker容器复制到主机),但我想运行

docker build
Run Code Online (Sandbox Code Playgroud)

并让它将我的Dockerfile某个地方创建的构建工件转储到我的主机文件系统上.

我可以在Dockerfile中使用一个命令来复制出容器并进入主机吗?喜欢相反的COPY

Mar*_*kai 8

根据 Docker 文档,添加了 API 版本 1.40

自定义构建输出

这是为了你想要的:

默认情况下,本地容器镜像是根据构建结果创建的。--output(或 -o)标志允许您覆盖此行为,并指定自定义导出器。例如,自定义导出器允许您将构建工件导出为本地文件系统上的文件而不是 Docker 映像,这对于生成本地二进制文件、代码生成等非常有用。

例如

$ docker build --output type=tar,dest=out.tar .
Run Code Online (Sandbox Code Playgroud)

具有多级Dockerfile

FROM golang AS build-stage
RUN go get -u github.com/LK4D4/vndr

FROM scratch AS export-stage
COPY --from=build-stage /go/bin/vndr /
Run Code Online (Sandbox Code Playgroud)

--output 选项从目标阶段导出所有文件。仅导出特定文件的常见模式是进行多阶段构建,并使用 COPY --from 将所需文件复制到新的暂存阶段。


Mat*_*mer -1

也许这个命令就是您正在寻找的

docker run -v ~/data:/var/logs <image>
Run Code Online (Sandbox Code Playgroud)

-v ~/data:/var/logs创建一个绑定安装卷,将/var/logs容器中的目录链接到~/data主机上的 vdirectory。Docker 使用 : 将主机路径与容器路径分开。

我推荐关于如何在 Docker 容器之间共享数据的文章