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

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


当前回答

对于任何试图使用MySQL容器并在您的计算机上本地存储卷的人来说。我使用了这个问题的顶级回复中提供的语法。但必须使用MySQL特有的特定路径

docker cp imageIdHere:/var/lib/mysql pathToYourLocalMachineHere

其他回答

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。

你可以用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

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

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

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服务器中,然后再进行一些。

如果您只想装载一个文件夹,而不是为容器创建特殊存储,则可以使用bind而不是volume:

使用标签构建图像:码头建造-t<图像>运行映像并绑定app.py存储的当前$(pwd)目录,并将其映射到容器内的/root/example/。docker run--mount type=bind,source=“$(pwd)”,target=/root/example/<image>python app.py