将文件从Docker容器复制到主机

我正在考虑使用docker在CI服务器上构建我的依赖项,这样我就不必在代理自身上安装所有运行时和库。 为了实现这一点,我需要将构建在容器内部的构建工件复制回主机。

那可能吗?


为了将容器中的文件复制到主机,可以使用该命令

docker cp <containerId>:/file/path/within/container /host/path/target

这是一个例子:

[jalal@goku scratch]$ sudo docker cp goofy_roentgen:/out_read.jpg .

这里goofy_roentgen是我从以下命令获得的名称:

[jalal@goku scratch]$ sudo docker ps
[sudo] password for jalal:
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

安装“音量”并将工件复制到此处:

mkdir artifacts
docker run -i -v ${PWD}/artifacts:/artifacts ubuntu:14.04 sh << COMMANDS
# ... build software here ...
cp <artifact> /artifacts
# ... copy more artifacts into `/artifacts` ...
COMMANDS

然后,当构建完成并且容器不再运行时,它已经将构建中的artifacts复制到主机上的artifacts目录中。

编辑:

CAVEAT:执行此操作时,可能会遇到与当前正在运行的用户的用户标识匹配的docker用户的用户标识问题。 也就是说, /artifacts的文件将显示为用户拥有的码头容器内使用的用户的UID。 解决这个问题的方法可能是使用主叫用户的UID:

docker run -i -v ${PWD}:/working_dir -w /working_dir -u $(id -u) 
    ubuntu:14.04 sh << COMMANDS
# Since $(id -u) owns /working_dir, you should be okay running commands here
# and having them work. Then copy stuff into /working_dir/artifacts .
COMMANDS

装入卷,复制工件,调整所有者ID和组ID:

mkdir artifacts
docker run -i --rm -v ${PWD}/artifacts:/mnt/artifacts centos:6 /bin/bash << COMMANDS
ls -la > /mnt/artifacts/ls.txt
echo Changing owner from $(id -u):$(id -g) to $(id -u):$(id -u)
chown -R $(id -u):$(id -u) /mnt/artifacts
COMMANDS
链接地址: http://www.djcxy.com/p/3007.html

上一篇: Copying files from Docker container to host

下一篇: How to deal with persistent storage (e.g. databases) in docker