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

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


当前回答

另一个好的选择是首先构建容器,然后使用-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 -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/

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

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

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

另一个好的选择是首先构建容器,然后使用-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 for Mac的人发布这个。这就是对我有用的:

 $ mkdir mybackup # local directory on Mac

 $ docker run --rm --volumes-from <containerid> \
    -v `pwd`/mybackup:/backup \  
    busybox \                   
    cp /data/mydata.txt /backup 

注意,当我使用-v装载时,会自动创建备份目录。

我希望有一天这对某人有用

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

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