Program Tip

Docker의 기존 명명 된 볼륨에 데이터를 추가하는 올바른 방법은 무엇입니까?

programtip 2020. 11. 30. 19:46
반응형

Docker의 기존 명명 된 볼륨에 데이터를 추가하는 올바른 방법은 무엇입니까?


볼륨 컨테이너와 함께 예전 방식으로 Docker를 사용했습니다.

docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins"

하지만 이제 명명 된 볼륨을 생성하여 새로운 방식으로 변경했습니다.

 docker volume create --name my-jenkins-volume 

이 새 볼륨을 새 Jenkins 컨테이너에 바인딩했습니다. 내가 남긴 유일한 것은 /var/jenkins_home이전 젠킨스 컨테이너 의 폴더입니다 . (사용하여 docker cp) 이제 새 명명 된 볼륨을 해당 폴더의 내용으로 채우고 싶습니다.

해당 폴더의 내용을 복사 할 수 있습니까 /var/lib/jenkins/volume/my-jenkins-volume/_data?


당신은 할 수 확실히 직접적으로 데이터를 복사 /var/lib/docker/volumes/my-jenkins-volume/_data하지만, 이렇게함으로써 당신은 다음과 같습니다 :

  • Docker 호스트에 대한 물리적 액세스에 의존합니다. 이 기술은 원격 Docker API와 상호 작용하는 경우 작동하지 않습니다.

  • 볼륨 구현의 특정 측면에 의존하면 향후 변경 될 수 있으며 이에 의존하는 프로세스가 중단 될 수 있습니다.

명령 줄 클라이언트를 통해 도커 API를 사용하여 수행 할 수있는 작업에 의존하는 것이 더 낫다고 생각합니다. 가장 쉬운 해결책은 아마도 다음과 같은 도우미 컨테이너를 사용하는 것입니다.

docker run -v my-jenkins-volume:/data --name helper busybox true
docker cp . helper:/data
docker rm helper

예를 들어 다음을 사용하여 허용되는 답변을 한 줄로 줄일 수 있습니다.

docker run --rm -v `pwd`:/src -v my-jenkins-volume:/data busybox cp -r /src /data

이미 존재하는 명명 된 볼륨에 데이터를 추가하기 위해 일부 컨테이너를 시작할 필요가 없습니다. 컨테이너를 만들고 여기에 데이터를 복사하기 만하면됩니다.

docker container create --name temp -v my-jenkins-volume:/data busybox
docker cp . temp:/data
docker rm temp

참고 URL : https://stackoverflow.com/questions/37468788/what-is-the-right-way-to-add-data-to-an-existing-named-volume-in-docker

반응형