Docker将文件从主机复制到容器
我正在尝试将一组文件从docker主机复制到容器。
在直接进入/ var / lib / docker / aufs / ...的AUFS系统上有效。
但是我是另一个使用Fedora的系统,它具有devicemapper作为存储驱动程序。
在这个系统上,如果我这样做:
I am trying to copy a set of files from docker host to container. On a AUFS system directly going into /var/lib/docker/aufs/... works. However I am another system with Fedora that has devicemapper as the storage driver. On this system if I do this:
[root@myhost tmp]# docker inspect -f '{{.Id}}' 393ef4b9f485
393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24
[root@myhost tmp]# cd /var/lib/docker/devicemapper/mnt/393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24
[root@myhost 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]# ls -l
total 0
[root@myhost 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]#
我什么也没得到。
我尝试了从主机复制文件到Docker容器的所有建议
使用tar似乎很棒,而不是直接转到基础FS。但是我不能假定所有容器中都会存在tar。
Using tar seems to be great, instead of directly going to the underlying FS. But I cannot assume that tar would be present in all containers.
如果相关,我什至尝试在容器中创建一个文件,但随后确实做了一个发现。 / var / lib / docker / devicemapper / mnt中的名称无效。
If it is relevant, I have even tried to create a file in the container, but it and then did a find . -name in /var/lib/docker/devicemapper/mnt to no avail.
有任何提示吗?
编辑1:
根据答案之一,添加这些约束。
的目的是将文件复制到没有a的容器中。不修改容器构建(Dockerfile),b。不安装任何ssh或ftp守护程序。和c。
EDIT 1: Based on one of the answers, adding these constraints. The intent is to copy files into a container without a. not modify the containers build (Dockerfile), b. To not install any ssh or ftp daemons. and c. not even change the way the container was started.
编辑2:添加docker info
:
EDIT 2: Adding the docker info :
# docker info
Containers: 1
Images: 21
Storage Driver: devicemapper
Pool Name: docker-253:0-397467-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: extfs
Data file:
Metadata file:
Data Space Used: 4.261 GB
Data Space Total: 107.4 GB
Data Space Available: 103.1 GB
Metadata Space Used: 3.596 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.144 GB
Udev Sync Supported: true
Library Version: 1.02.90 (2014-09-01)
Execution Driver: native-0.2
Kernel Version: 3.17.4-301.fc21.x86_64
Operating System: Fedora 21 (Twenty One)
CPUs: 4
Total Memory: 3.86 GiB
Name: fedora-docker
Docker版本为1.6.0,并且容器映像基于RHEL。
Docker Version is 1.6.0 and container image is based on RHEL.
更新:trong>
现在docker cp命令行命令可以双向运行。
请参见 docker cp 文档
用法
Usage
docker cp [选项]容器:SRC_PATH DEST_PATH |-
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [选项] SRC_PATH |-容器:DEST_PATH
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
=======原始答案============
=======Original Answer ==============
找到了最简单的跨存储驱动程序的方法:
Found the most easiest way that works across storage drivers:
cd /proc/`docker inspect --format "{{.State.Pid}}" <containerid>`/root
已在使用Devicemapper作为存储驱动程序
的Fedora以及在使用AUFS作为存储驱动程序的Ubuntu上对此进行了测试。
都适合我。
Have tested this on Fedora with Devicemapper as the storage driver and on Ubuntu with AUFS as the storage driver. Works for me in both the cases.