将文件从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