[docker] 호스트에서 Docker 컨테이너로 파일 복사

우리가 작업하는 Docker 컨테이너의 백업 및 복원 솔루션을 구축하려고합니다.

나는 내가 만든 Docker 기본 이미지를 가지고 있으며 ubuntu:base파일을 추가하기 위해 Docker 파일로 매번 다시 빌드하지 않아도됩니다.

호스트 컴퓨터에서 실행되는 스크립트를 만들고 ubuntu:baseDocker 이미지를 사용하여 새 컨테이너를 만든 다음 파일을 해당 컨테이너에 복사하려고합니다.

호스트에서 컨테이너로 파일을 어떻게 복사합니까?



답변

cp명령을 사용하여 파일을 복사 할 수 있습니다.

하나의 특정 파일을 다음과 같이 컨테이너에 복사 할 수 있습니다.

docker cp foo.txt mycontainer:/foo.txt

컨테이너에서 다음과 같은 하나의 특정 파일을 복사 할 수 있습니다.

docker cp mycontainer:/foo.txt foo.txt

강조를 위해, mycontainerA는 컨테이너 ID, 하지 화상 ID.

폴더에 포함 된 여러 파일 을 다음을 사용 src하여 target폴더에 복사 할 수 있습니다 .

docker cp src/. mycontainer:/target
docker cp mycontainer:/src/. target

참조 : Docker CLI 문서cp

1.8 이전의 Docker 버전에서는 파일을 컨테이너에서 호스트로 복사하는 것만 가능했습니다. 호스트에서 컨테이너로가 아닙니다.


답변

  1. 컨테이너 이름 또는 짧은 컨테이너 ID를 가져옵니다.

    $ docker ps
    
  2. 전체 컨테이너 ID를 가져옵니다.

    $ docker inspect -f   '{{.Id}}'  SHORT_CONTAINER_ID-or-CONTAINER_NAME
    
  3. 파일 복사 :

    $ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE
    

예:

$ docker ps

CONTAINER ID      IMAGE    COMMAND       CREATED      STATUS       PORTS        NAMES

d8e703d7e303   solidleon/ssh:latest      /usr/sbin/sshd -D                      cranky_pare

$ docker inspect -f   '{{.Id}}' cranky_pare

또는

$ docker inspect -f   '{{.Id}}' d8e703d7e303

d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5

$ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5**/root/file.txt


답변

가장 깨끗한 방법은 컨테이너를 시작할 때 컨테이너에 호스트 디렉토리를 마운트하는 것입니다.

{host} docker run -v /path/to/hostdir:/mnt --name my_container my_image
{host} docker exec -it my_container bash
{container} cp /mnt/sourcefile /path/to/destfile


답변

다음은 상당히 추한 방법이지만 작동합니다.

docker run -i ubuntu /bin/bash -c 'cat > file' < file


답변

실행중인 컨테이너 에서이 작업을 수행 해야하는 경우 docker exec (1.3에 추가)를 사용할 수 있습니다.

먼저 컨테이너 이름 또는 ID를 찾으십시오.

$ docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS                   NAMES
b9b7400ddd8f        ubuntu:latest                "/bin/bash"         2 seconds ago       Up 2 seconds                                elated_hodgkin

이 예에서 우리는 중 하나를 사용할 수 있습니다 이상 b9b7400ddd8f또는 elated_hodgkin.

/tmp/somefiles호스트의 모든 내용을 /var/www컨테이너 에 복사 하려면 다음 을 수행하십시오.

$ cd /tmp/somefiles
$ tar -cv * | docker exec -i elated_hodgkin tar x -C /var/www

그런 다음 /bin/bash컨테이너에서 exec를 실행 하고 작동하는지 확인할 수 있습니다.

$ docker exec -it elated_hodgkin /bin/bash
root@b9b7400ddd8f:/# ls /var/www
file1  file2


답변

  1. 새 dockerfile을 만들고 기존 이미지를 기본으로 사용하십시오.

    FROM myName/myImage:latest
    
    ADD myFile.py bin/myFile.py
    
  2. 그런 다음 컨테이너를 빌드하십시오.

    docker build .
    

답변

해결책은 다음과 같습니다.

Docker 셸에서

root@123abc:/root#  <-- get the container ID

호스트에서

cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root

파일은 컨테이너가 파일 시스템에있는 위치에 직접 복사되어야합니다.