Docker将文件从dockerfile复制到主机

时间:2018-04-03 20:21:48

标签: docker

我正在编写Dockerfile来构建应用程序。我知道您可以使用

手动将文件复制出容器
docker cp <containerId>:/file/path/within/container /host/path/target

(见Copying files from Docker container to host),但我想运行

docker build

并将我的Dockerfile创建的构建工件转储到我的主机文件系统上。

我是否可以在Dockerfile中使用命令将容器复制到主机中?与COPY相反?

3 个答案:

答案 0 :(得分:1)

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

Custom build outputs

针对您的需求:

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

例如

Definition Id_sym'' {A: Type} {x y: A}: Id A x y -> Id A y x :=
let P := (fun y' _ => Id A y' x) in
Id_ind A x P (refl A x) y.

具有多级$ docker build --output type=tar,dest=out.tar .

Dockerfile

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

答案 1 :(得分:0)

也许此命令就是您要搜索的

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

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

我推荐How To Share Data between Docker Containers

上的文章

答案 2 :(得分:0)

除了@Marakai出色的答案外,还必须设置环境变量DOCKER_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 .

文件将被复制到目录中。