Docker Copying file from host to container

2019-02-22 07:44发布

问题:

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]#

I get nothing. I have tried all suggestions from Copying files from host to Docker container

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.

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.

Any hints?

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.

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 Version is 1.6.0 and container image is based on RHEL.

回答1:

UPDATE: Now docker cp command line command works both ways. See the docker cp documentation

Usage

docker cp [OPTIONS] CONTAINER: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

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.



回答2:

This answer provides you a different view of copying.

1> Use this way provided you know the IP of the container. If your aim is just to take the files form the host system and put it in the container you can do it using different ways. File transfer protocol is a easier way. you can setup an SSH server(sshd) on your docker container and use scp or any other file transfer tools to do it.

2> Sharing files via volumes using this command docker run -ti -v /host-path-of-directory-having-files/:/target-path-in-container/:rw image-name bash. You can refer this link https://docs.docker.com/userguide/dockervolumes/