호스트에서 도커 컨테이너로 파일을 복사하는 방법은 무엇입니까?
저는 우리가 함께 작업하는 도커 컨테이너에 대한 백업 및 복원 솔루션을 구축하려고 합니다.
이미지를 있습니다, 제만도베이가있를다습니고지가미지이커든스▁dock▁that▁have▁image▁ier▁base,다있니습▁i▁created제가▁have가고지를만.ubuntu:base
파일을 추가하기 위해 도커 파일을 사용하여 매번 재작성할 필요가 없습니다.
시스템에서 실행되는 새 하여 새 .ubuntu:base
이미지를 도킹한 다음 해당 컨테이너에 파일을 복사합니다.
호스트에서 컨테이너로 파일을 복사하려면 어떻게 해야 합니까?
그cp
명령을 사용하여 파일을 복사할 수 있습니다.
다음과 같이 특정 파일 하나를 컨테이너에 복사할 수 있습니다.
docker cp foo.txt container_id:/foo.txt
컨테이너에서 다음과 같은 특정 파일을 복사할 수 있습니다.
docker cp container_id:/foo.txt foo.txt
강하자면조.container_id
이미지 ID가 아닌 컨테이너 ID입니다. (사용)docker ps
가 포함된 container_id
s.)
에 src
으로 복사할 수 .target
사용하는 폴더:
docker cp src/. container_id:/target
docker cp container_id:/src/. target
참조:도커 CLI 문서:
1.8 이전 버전의 도커에서는 컨테이너에서 호스트로 파일을 복사하는 것만 가능했습니다.호스트에서 컨테이너로 이동할 수 없습니다.
컨테이너 이름 또는 짧은 컨테이너 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 cp container_id:./bar/foo.txt .
도.
docker cp
명령은 두 가지 방식으로도 작동합니다.
호스트에서 컨테이너로
docker exec -i container_id sh -c 'cat > ./bar/foo.txt' < ./foo.txt
호스트에서 컨테이너로 복사하는 두 번째 접근 방식:
docker cp foo.txt mycontainer:/foo.txt
용기에서 용기로 혼합물 1과 2
docker cp container_id1:./bar/foo.txt . docker exec -i container_id2 sh -c 'cat > ./bar/foo.txt' < ./foo.txt
다음은 꽤 추악한 방법이지만 효과가 있습니다.
docker run -i ubuntu /bin/bash -c 'cat > file' < file
실행 중인 컨테이너에서 이 작업을 수행해야 하는 경우 도커 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
에서는 위의예에서는다사수있용습다니할음을있다▁▁in습▁either▁can▁above▁the를 사용할 수 있습니다.b9b7400ddd8f
또는elated_hodgkin
.
당신이 내복면려사하을의 모든 ./tmp/somefiles
에서 의주이되어까지/var/www
있는 경우
$ cd /tmp/somefiles
$ tar -cv * | docker exec -i elated_hodgkin tar x -C /var/www
그러면 실행할 수 있습니다./bin/bash
용기에 넣어 작동 여부를 확인합니다.
$ docker exec -it elated_hodgkin /bin/bash
root@b9b7400ddd8f:/# ls /var/www
file1 file2
새 도커 파일을 만들고 기존 이미지를 기반으로 사용합니다.
FROM myName/myImage:latest ADD myFile.py bin/myFile.py
그런 다음 컨테이너를 작성합니다.
docker build .
해결책은 아래와 같습니다.
도커 쉘로부터,
root@123abc:/root# <-- get the container ID
호스트에서
cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root
파일은 컨테이너가 파일 시스템에 있는 위치에 직접 복사해야 합니다.
실행 중인 컨테이너에 파일을 복사하기 위한 또 다른 솔루션은 tar를 사용하는 것입니다.
tar -c foo.sh | docker exec -i theDockerContainer /bin/tar -C /tmp -x
니 파일을 합니다.foo.sh
안으로/tmp
용기의.
: 제거 : 리던던트-f
마르텐스의 코멘트 덕분입니다.
호스트에서 실행 중인 컨테이너로 파일을 복사하려면 다음과 같이 하십시오.
docker exec -i $CONTAINER /bin/bash -c "cat > $CONTAINER_PATH" < $HOST_PATH
에릭의 답변과 Mikl의 코멘트와 z0r의 코멘트를 바탕으로 합니다.
제목의 이 질문에서 제기된 '호스트에서 도커 컨테이너로 파일 복사' 질문에 대한 직접적인 답변입니다.
ㅠㅠdocker cp
그것은 가장 쉬운 방법이며 내 Mac에서도 작동합니다.용도:
docker cp /root/some-file.txt some-docker-container:/root
됩니다.some-file.txt
./root
합니다. 이름은 "Docker"입니다.some-docker-container
합니다./root
보안 복사 구문에 매우 가깝습니다.그리고 이전 게시물과 같이 반대로 사용할 수 있습니다.즉, 컨테이너에서 호스트로 파일을 복사합니다.
그리고 이 게시물을 다운링크하기 전에 입력하십시오.docker cp --help
설명서를 읽는 것은 매우 도움이 될 수 있습니다. 가끔은...
이러한 방식이 마음에 들지 않고 이미 생성되어 실행 중인 컨테이너에 데이터 볼륨을 저장하려면 현재 재생이 유일한 옵션입니다.참고 항목기존 도커 컨테이너에 볼륨을 추가하려면 어떻게 해야 합니까?
여기서 대부분의 (업데이트된) 솔루션을 시도했지만 도커 17.09(2018년)에는 더 이상 /var/lib/docker/aufs 폴더가 없습니다.
이간한.docker cp
이 과제를 해결했습니다.
docker cp c:\path\to\local\file container_name:/path/to/target/dir/
container_name을(를) 가져오는 방법은 무엇입니까?
docker ps
이 .NAMES
부분.사용 안 함IMAGE
.
1과 함께, 도커 1.8 버전docker cp
호스트에서 컨테이너로 파일을 복사할 수 있습니다.도커 블로그 게시물 도커 1.8: 콘텐츠 신뢰, 도구 상자 및 레지스트리 및 오케스트레이션 업데이트를 참조하십시오.
컨테이너와 로컬 파일 시스템 간에 파일/폴더를 복사하려면 다음 명령을 입력합니다.
docker cp {SOURCE_FILE} {DESTINATION_CONTAINER_ID}:/{DESTINATION_PATH}
예를들면,
docker cp /home/foo container-id:/home/dir
컨테이너 ID를 가져오려면 지정된 명령을 입력합니다.
docker ps
위의 내용은 docker.com 에서 가져온 것입니다.
컨테이너가 이미 실행 중이라고 가정하고 지정된 명령을 입력합니다.
# cat /path/to/host/file/ | docker exec -i -t <container_id> bash -c "/bin/cat > /path/to/container/file"
공유 디렉터리를 사용하여 파일을 공유하려면 지정된 명령을 입력하여 컨테이너를 실행합니다.
# docker run -v /path/to/host/dir:/path/to/container/dir ...
참고: 컨테이너의 사용자가 호스트의 사용자와 다르기 때문에 사용 권한에 문제가 발생할 수 있습니다.
컨테이너 실행 구문:
docker run -v /HOST/folder:/Container/floder
도커 파일 내
COPY hom* /myFolder/ # adds all files starting with "hom"
COPY hom?.txt /myFolder/ # ? is replaced with any single character, e.g., "home.txt"
다음은 도커에서 호스트로 데이터를 복사하는 명령입니다.
docker cp container_id:file path/filename /hostpath
docker cp a13fb9c9e674:/tmp/dgController.log /tmp/
다음은 호스트에서 도커로 데이터를 복사하는 명령입니다.
docker cp a.txt ccfbeb35116b:/home/
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
대상 경로는 이전 경로여야 합니다.
도커 환경에서 모든 컨테이너는 다음 디렉터리에 있습니다.
/var/lib/docker/aufs/required-docker-id/
원본 디렉터리/파일을 컨테이너의 모든 부분에 복사하려면 지정된 명령을 입력합니다.
sudo cp -r mydir/ /var/lib/docker/aufs/mnt/required-docker-id/mnt/
Docker cp 명령은 컨테이너와 호스트 시스템 간에 파일 및 폴더를 복사할 수 있는 편리한 유틸리티입니다.
호스트 시스템에서 컨테이너로 파일을 복사하려면 다음과 같은 docker cp 명령을 사용해야 합니다.
docker cp host_source_path container:destination_path
도커 ps 명령을 사용하여 실행 중인 컨테이너를 먼저 나열합니다.
abhishek@linuxhandbook:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
8353c6f43fba 775349758637 "bash" 8 seconds ago Up 7
seconds ubu_container
컨테이너 ID 또는 컨테이너 이름을 알아야 합니다.제 경우 도커 컨테이너 이름은 ubu_container입니다. 컨테이너 ID는 8353c6f43fba입니다.
파일이 성공적으로 복사되었는지 확인하려면 다음과 같은 방법으로 컨테이너를 입력한 다음 일반 리눅스 명령을 사용할 수 있습니다.
docker exec -it ubu_container bash
호스트 시스템에서 도커 컨테이너로 파일 복사 도커 cp를 사용한 복사는 Linux의 copy 명령과 유사합니다.
저는 a.py 라는 이름의 파일을 컨테이너에 있는 home/slot1 디렉토리에 복사하려고 합니다.
docker cp a.py ubu_container:/home/dir1
파일이 성공적으로 복사되면 화면에 출력이 표시되지 않습니다.대상 경로가 없으면 다음과 같은 오류가 표시됩니다.
abhishek@linuxhandbook:~$ sudo docker cp a.txt ubu_container:/home/dir2/subsub
Error: No such container:path: ubu_container:/home/dir2
대상 파일이 이미 있는 경우 경고 없이 덮어씁니다.
다음 컨테이너 이름 대신 컨테이너 ID를 사용할 수도 있습니다.
docker cp a.py 8353c6f43fba:/home/dir1
해라docker cp
.
용도:
docker cp CONTAINER:PATH HOSTPATH
파일/폴더를 복사합니다.PATH
에게HOSTPATH
.
호스트가 CentOS 또는 Fedora인 경우 프록시가 없습니다./var/lib/docker/aufs
하지만 그것은 아래에 있습니다./proc
:
cp -r /home/user/mydata/* /proc/$(docker inspect --format "{{.State.Pid}}" <containerid>)/root
이 cmd는 의 모든 내용을 복사합니다.data
로의 디렉토리./
ID가 "containerid"인 컨테이너입니다.
tar
그리고.docker cp
디렉토리의 모든 것을 복사하기에 좋은 조합입니다.
데이터 볼륨 컨테이너 생성
docker create --name dvc --volume /path/on/container cirros
디렉터리 계층을 보존하려면 다음과 같이 하십시오.
tar -c -C /path/on/local/machine . | docker cp - dvc:/path/on/container
작업 확인
docker run --rm --volumes-from dvc cirros ls -al /path/on/container
이 질문을 발견한 많은 사람들은 실제로 파일이 생성되는 동안 도커 이미지에 파일을 복사하는 문제가 있을 수 있습니다(제가 작성했습니다).
그런 경우에는 다음을 사용할 수 있습니다.COPY
의 지휘권.Dockerfile
이미지를 생성하는 데 사용합니다.
설명서를 참조하십시오.
나 같은 사람이 무슨 말을 하는지 모를 경우.mycontainer
@h3nrik 응답은 실제로 컨테이너 ID를 의미합니다.파일 복사하기WarpSquare.mp4
에/app/example_scenes/1440p60
종료된 도커 컨테이너에서 현재 폴더로 이동합니다.
docker cp `docker ps -q -l`:/app/example_scenes/1440p60/WarpSquare.mp4 .
docker ps -q -l
마지막으로 종료한 인스턴스의 컨테이너 ID를 풀업합니다.종료된 용기가 아닌 경우 다음 방법으로 얻을 수 있습니다.docker container ls
또는docker ps
docker cp SRC_PATH CONTAINER_ID:DEST_PATH
예를 들어, xxxx/download/jenkins 파일을 Tomcat에 복사하려고 합니다.
나는 톰캣 컨테이너의 ID를 얻기 시작합니다.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63686740b488 tomcat "catalina.sh run" 12 seconds ago Up 11 seconds 0.0.0.0:8080->8080/tcp peaceful_babbage
docker cp xxxx/download/jenkins.war 63686740b488:usr/local/tomcat/webapps/
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
호스트 시스템에서 컨테이너로 복사합니다.
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
컨테이너에서 호스트 시스템으로 복사합니다.
Tomcat 컨테이너를 실행하는 동안 단일 파일을 복사하기 위한 온라인입니다.
docker run -v /PATH_TO_WAR/sample.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat
이렇게 하면 war 파일이 webapps 디렉토리에 복사되고 앱이 즉시 실행됩니다.
이것이 저에게 효과가 있었던 것입니다.
#Run the docker image in detached mode
$docker run -it -d test:latest bash
$ docker ps
CONTAINER ID IMAGE COMMAND
a6c1ff6348f4 test:latest "bash"
#Copy file from host to container
sudo docker cp file.txt a6c1ff6348f4:/tmp
#Copy the file from container to host
docker cp test:/tmp/file.txt /home
내가 가장 좋아하는 방법:
컨테이너:
CONTAINER_ID=$(docker ps | grep <string> | awk '{ print $1 }' | xargs docker inspect -f '{{.Id}}')
file.txt
mv -f file.txt /var/lib/docker/devicemapper/mnt/$CONTAINER_ID/rootfs/root/file.txt
또는
mv -f file.txt /var/lib/docker/aufs/mnt/$CONTAINER_ID/rootfs/root/file.txt
언급URL : https://stackoverflow.com/questions/22907231/how-to-copy-files-from-host-to-docker-container
'source' 카테고리의 다른 글
Powershell, xml을 화면으로 출력 (0) | 2023.08.12 |
---|---|
그라데이션 테두리 (0) | 2023.08.12 |
문자열에서 특정 문자 잘라내기 (0) | 2023.08.12 |
이미지를 문서 디렉토리에 저장하고 전자 메일 첨부 파일을 검색하는 중 (0) | 2023.08.12 |
슬라이드 위/아래 애니메이션으로 보기 표시 및 숨기기 (0) | 2023.08.12 |