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

Docker:将文件从Docker容器复制到主机

申屠亦
2023-03-14

我正在考虑使用Docker在持续集成(CI)服务器上构建我的依赖项,这样我就不必在代理本身上安装所有的运行时和库。

为了实现这一点,我需要将在容器中构建的构建构件复制回主机中。有可能吗?

共有3个答案

墨高杰
2023-03-14

挂载一个“卷”并将工件复制到其中:

mkdir artifacts
docker run -i -v ${PWD}/artifacts:/artifacts ubuntu:14.04 sh << COMMANDS
# ... build software here ...
cp <artifact> /artifacts
# ... copy more artifacts into `/artifacts` ...
COMMANDS

然后,当构建完成并且容器不再运行时,它已经将构件从构建复制到主机上的artifacts目录中。

警告:当您执行此操作时,docker用户的用户id与当前运行用户的用户id匹配时,可能会遇到问题。也就是说,/artifacts中的文件将显示为用户所有,并在docker容器中使用用户的UID。解决这一问题的方法可能是使用调用用户的UID:

docker run -i -v ${PWD}:/working_dir -w /working_dir -u $(id -u) \
    ubuntu:14.04 sh << COMMANDS
# Since $(id -u) owns /working_dir, you should be okay running commands here
# and having them work. Then copy stuff into /working_dir/artifacts .
COMMANDS
潘意
2023-03-14

您不需要使用Docker Run

您可以使用Docker Create来实现。

从文档中:

docker create命令在指定的映像上创建一个可写容器层,并为运行指定的命令做好准备。然后将容器ID打印到stdout。这与Docker run-d类似,只是容器从不启动。

因此,您可以执行以下操作:

docker create -ti --name dummy IMAGE_NAME bash
docker cp dummy:/path/to/file /dest/to/file
docker rm -f dummy

在这里,你永远不会启动容器。这对我来说是有益的。

莘翰采
2023-03-14

为了将文件从容器复制到主机,可以使用命令

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

这里有一个例子:

$ sudo docker cp goofy_roentgen:/out_read.jpg .

这里goofy_roentgen是我从以下命令获得的容器名称:

$ sudo docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
1b4ad9311e93        bamos/openface      "/bin/bash"         33 minutes ago      Up 33 minutes       0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp   goofy_roentgen

您还可以使用容器ID的(部分)。下面的命令相当于第一个

$ sudo docker cp 1b4a:/out_read.jpg .
 类似资料:
  • 问题内容: 我正在尝试为我们使用的Docker容器构建备份和还原解决方案。 我已经创建了Docker基本映像,并且不想每次都使用Docker文件重建它来向其添加文件。 我想创建一个从主机运行的脚本,并使用Docker映像创建一个新容器,然后将文件复制到该容器中。 如何将文件从主机复制到容器? 问题答案: 该命令可用于复制文件。 可以将一个特定文件复制到容器中,例如: 可以从容器中复制一个特定文件,

  • 问题内容: 我正在考虑使用Docker在持续集成(CI)服务器上构建我的依赖项,这样我就不必在代理程序本身上安装所有运行时和库。 为此,我需要将容器内部构建的构建工件复制回主机。那可能吗? 问题答案: 为了将文件从容器复制到主机,可以使用以下命令 这是一个例子: 这里 goofy_roentgen 是我从以下命令获得的容器名称: 您还可以使用(部分) 容器ID 。以下命令等效于第一个

  • 问题内容: 我正在尝试将一组文件从Docker主机复制到容器。在AUFS系统上,直接进入/ var / lib / docker / aufs / …即可。但是我是另一个使用Fedora的系统,它具有devicemapper作为存储驱动程序。在这个系统上,如果我这样做: 我什么都没有。我已经尝试了将文件从主机复制到Docker容器的所有建议 使用tar似乎很棒,而不是直接转到基础FS。但是我不能假

  • 我一无所获。我尝试了从将文件从主机复制到Docker容器的所有建议 使用tar似乎很棒,而不是直接去底层FS。但我不能假设焦油会出现在所有容器中。 如果是相关的,我甚至尝试在容器中创建一个文件,但它然后做了一个查找。-在/var/lib/docker/devicemapper/mnt中命名无效。

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

  • 我知道,有可能通过在主机和docker容器之间双向复制文件,也有可能通过docker-py从正在运行的容器中获取文件。但是我不知道如何使用docker-py将文件从主机复制到运行容器。你们有遇到过这种问题吗?是否可以或者我必须使用python执行命令。我想避免这种解决方案。