当前位置: 首页 > 知识库问答 >
问题:

Docker从dockerfile[duplicate]中将文件复制到主机

宣胜
2023-03-14

我正在编写一个Dockerfile来构建一个应用程序。我知道你可以用

docker cp <containerId>:/file/path/within/container /host/path/target

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

docker build

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

Dockerfile中是否有可以用于从容器复制到主机的命令?与复制相反?

共有3个答案

孔瑾瑜
2023-03-14

也许这个命令就是你要搜索的

docker run -v ~/data:/var/logs <image>

创建一个绑定装载卷,将容器中的目录链接到主机上的数据目录。Docker使用:将主机路径与容器路径分离。

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

戴鸿羽
2023-03-14

除了@Marakai极好的答案外,还必须将env变量DOCKER\u BUILDKIT设置为1。所以命令是:

$ DOCKER_BUILDKIT=1  docker build --output type=tar,dest=out.tar .

或者一个可以分成两个命令:

$ export DOCKER_BUILDKIT=1
$ docker build --output type=tar,dest=out.tar .  # to gen into a tar file

或者保存文件而不形成tar文件:

$ mkdir out
$ docker build  --output out .

文件将被复制到目录中。

韦衡
2023-03-14

根据Docker docs,增加了API版本1.40

自定义生成输出

这是为了满足您的需求:

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

比如说

$ docker build --output type=tar,dest=out.tar .

使用多级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 /

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

 类似资料:
  • 我正在编写来构建应用程序。我知道您可以使用 (请参见将文件从Docker容器复制到主机),但我只想运行 在Dockerfile中是否有一个命令可以用于从容器中复制到主机中?像的反义词吗?

  • 我正在使用docker容器来编译一段代码,我不一定要将其docker化。我已使用必要的构建工具设置了一个映像,但我希望以某种方式将编译后的文件从容器中取出,而无需使用docker cp container:/file host/file命令。换句话说,我希望自动化这个过程,以便在构建完成后,将生成的文件复制到主机。 Dockerfile

  • 问题内容: dockerfile成功构建后,我想获取一些文件,但它不会将文件从容器复制到主机。 这意味着当我构建了dockerfile时,这些文件已经被托管。 问题答案: 不 支持将文件“从Dockerfile”复制到主机。Dockerfile只是指定如何构建映像的配方。 构建时,您可以将文件从主机复制到要构建的映像(使用或指令) 您还可以使用docker cp将文件从 容器 (已为‘d 的映像)

  • 我想在dockerfile成功构建时获取一些文件,但它不将文件从容器复制到主机。 这意味着当我构建dockerfile时,文件已经是主机了。

  • 我正在考虑使用Docker在持续集成(CI)服务器上构建我的依赖项,这样我就不必在代理本身上安装所有的运行时和库。 为了实现这一点,我需要将在容器中构建的构建构件复制回主机中。有可能吗?