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

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


当前回答

docker cp[OPTIONS]CONTAINER:SRC_PATH DEST_PATH将从容器复制到主机。

例如docker cp测试:/opt/file1/etc/

对于Vice Versa:

docker cp[OPTIONS]SRC_PATH CONTAINER:DEST_PATH从主机复制到容器。

其他回答

如果您没有正在运行的容器,只有一个图像,并且假设您只想复制一个文本文件,可以执行以下操作:

docker run the-image cat path/to/container/file.txt > path/to/host/file.txt

另一个好的选择是首先构建容器,然后使用-c标志和shell解释器运行它,以执行一些命令

docker run --rm -i -v <host_path>:<container_path> <mydockerimage> /bin/sh -c "cp -r /tmp/homework/* <container_path>"

上述命令执行以下操作:

-i=以交互模式运行容器

--rm=执行后删除容器。

-v=将文件夹作为卷从主机路径共享到容器路径。

最后,/bin/sh-c允许您引入一个命令作为参数,该命令会将作业文件复制到容器路径。

我希望这个额外的答案可以帮助你

如果您需要一个小文件,可以使用此部分

Docker容器内部

docker运行-it-p 4122:4122<container_ID>

nc -l -p 4122 < Output.txt

主机

nc 127.0.0.1 4122 > Output.txt

如果您只想从映像(而不是正在运行的容器)中提取文件,可以执行以下操作:

docker运行--rm<image>cat<source>><local_dest>

这将打开容器,写入新文件,然后删除容器。然而,一个缺点是文件权限和修改日期不会被保留。

您不需要使用docker run。

你可以用docker create来完成。

从文档中:

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

因此,您可以做到:

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

在这里,您永远不会启动容器。这看起来对我有利。