우리가 작업하는 Docker 컨테이너의 백업 및 복원 솔루션을 구축하려고합니다.
나는 내가 만든 Docker 기본 이미지를 가지고 있으며 ubuntu:base
파일을 추가하기 위해 Docker 파일로 매번 다시 빌드하지 않아도됩니다.
호스트 컴퓨터에서 실행되는 스크립트를 만들고 ubuntu:base
Docker 이미지를 사용하여 새 컨테이너를 만든 다음 파일을 해당 컨테이너에 복사하려고합니다.
호스트에서 컨테이너로 파일을 어떻게 복사합니까?
답변
이 cp
명령을 사용하여 파일을 복사 할 수 있습니다.
하나의 특정 파일을 다음과 같이 컨테이너에 복사 할 수 있습니다.
docker cp foo.txt mycontainer:/foo.txt
컨테이너에서 다음과 같은 하나의 특정 파일을 복사 할 수 있습니다.
docker cp mycontainer:/foo.txt foo.txt
강조를 위해, mycontainer
A는 컨테이너 ID, 하지 화상 ID.
폴더에 포함 된 여러 파일 을 다음을 사용 src
하여 target
폴더에 복사 할 수 있습니다 .
docker cp src/. mycontainer:/target
docker cp mycontainer:/src/. target
참조 : Docker CLI 문서cp
1.8 이전의 Docker 버전에서는 파일을 컨테이너에서 호스트로 복사하는 것만 가능했습니다. 호스트에서 컨테이너로가 아닙니다.
답변
-
컨테이너 이름 또는 짧은 컨테이너 ID를 가져옵니다.
$ docker ps
-
전체 컨테이너 ID를 가져옵니다.
$ docker inspect -f '{{.Id}}' SHORT_CONTAINER_ID-or-CONTAINER_NAME
-
파일 복사 :
$ 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
답변
-
새 dockerfile을 만들고 기존 이미지를 기본으로 사용하십시오.
FROM myName/myImage:latest ADD myFile.py bin/myFile.py
-
그런 다음 컨테이너를 빌드하십시오.
docker build .
답변
해결책은 다음과 같습니다.
Docker 셸에서
root@123abc:/root# <-- get the container ID
호스트에서
cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root
파일은 컨테이너가 파일 시스템에있는 위치에 직접 복사되어야합니다.