我正在考虑使用Docker在持续集成(CI)服务器上构建依赖关系,这样我就不必在代理本身上安装所有运行时和库。
为了实现这一点,我需要将容器内部构建的构建工件复制回主机。这可能吗?
我正在考虑使用Docker在持续集成(CI)服务器上构建依赖关系,这样我就不必在代理本身上安装所有运行时和库。
为了实现这一点,我需要将容器内部构建的构建工件复制回主机。这可能吗?
当前回答
docker run -dit --rm IMAGE
docker cp CONTAINER:SRC_PATH DEST_PATH
https://docs.docker.com/engine/reference/commandline/run/https://docs.docker.com/engine/reference/commandline/cp/
其他回答
docker run -dit --rm IMAGE
docker cp CONTAINER:SRC_PATH DEST_PATH
https://docs.docker.com/engine/reference/commandline/run/https://docs.docker.com/engine/reference/commandline/cp/
要将文件从容器复制到主机,可以使用以下命令
docker cp <containerId>:/file/path/within/container /host/path/target
下面是一个示例:
$ sudo docker cp goofy_roentgen:/out_read.jpg .
这里,高飞_伦琴是我从以下命令中获得的容器名称:
$ 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 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
在这里,您永远不会启动容器。这看起来对我有利。
另一个好的选择是首先构建容器,然后使用-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 run -d -v hostpath:dockerimag