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

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


当前回答

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

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

其他回答

docker cp containerId:source_path destination_path

containerId可以从docker ps-a命令获得

源路径应该是绝对的。例如,如果应用程序/服务目录从docker容器中的应用程序开始,则路径为/app/some_directory/file

示例:docker cp d86844abc129:/app/server/output/server-test.png C:/Users/someone/Desktop/output

在主机系统(容器外部)上创建一个数据目录,并将其装载到容器内部可见的目录中。这将文件放置在主机系统上的已知位置,并使主机系统中的工具和应用程序可以轻松访问文件

docker run -d -v /path/to/Local_host_dir:/path/to/docker_dir docker_image:tag

另一个好的选择是首先构建容器,然后使用-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允许您引入一个命令作为参数,该命令会将作业文件复制到容器路径。

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

从DockerContainer到LocalMachine

$docker cp containerId:/sourceFilePath/someFile.txt C:/localMachineDestinationFolder

从LocalMachine到DockerContainer

$docker cp C:/localMachineSourceFolder/someFile.txt containerId:/containerDestinationFolder

大多数答案并没有表明容器必须在docker cp工作之前运行:

docker build -t IMAGE_TAG .
docker run -d IMAGE_TAG
CONTAINER_ID=$(docker ps -alq)
# If you do not know the exact file name, you'll need to run "ls"
# FILE=$(docker exec CONTAINER_ID sh -c "ls /path/*.zip")
docker cp $CONTAINER_ID:/path/to/file .
docker stop $CONTAINER_ID