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

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


当前回答

我将PowerShell(Admin)与此命令一起使用。

docker cp {container id}:{container path}/error.html  C:\\error.html

实例

docker cp ff3a6608467d:/var/www/app/error.html  C:\\error.html

其他回答

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

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 .

作为一个更通用的解决方案,Jenkins有一个CloudBees插件可以在Docker容器中构建。您可以从Docker注册表中选择要使用的图像,或者定义要构建和使用的Dockerfile。

它将把工作区作为一个卷装载到容器中(使用适当的用户),将其设置为工作目录,执行您请求的任何命令(在容器内)。您还可以使用docker工作流插件(如果您更喜欢代码而不是UI),使用image.inside(){}命令来完成此操作。

基本上,所有这些都要烘焙到CI/CD服务器中,然后再进行一些。

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/

我将PowerShell(Admin)与此命令一起使用。

docker cp {container id}:{container path}/error.html  C:\\error.html

实例

docker cp ff3a6608467d:/var/www/app/error.html  C:\\error.html

最简单的方法是创建一个容器,获取ID,然后从那里复制

IMAGE_TAG=my-image-tag
container=$(docker create ${IMAGE_TAG})
docker cp ${container}:/src-path ./dst-path/