Каков правильный способ добавления данных в существующий именованный том в 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 моего предыдущего контейнера jenkins. (с помощью docker cp) Теперь я хочу заполнить свой новый том с томом содержимым этой папки.

Могу ли я просто скопировать содержимое этой папки в /var/lib/jenkins/volume/my-jenkins-volume/_data?

Ответ 1

Вы можете, конечно, скопировать данные непосредственно в /var/lib/docker/volumes/my-jenkins-volume/_data, но, делая это, вы:

  • Опираясь на физический доступ к хосту докера. Этот метод не будет работать, если вы взаимодействуете с удаленным докере api.

  • Опираясь на конкретный аспект реализации объема, вы могли бы измениться в будущем, нарушив любые процессы, которые у вас есть, полагаясь на него.

Я думаю, что вам лучше полагаться на то, что вы можете выполнить, используя apk-docker, через клиент командной строки. Самое простое решение, вероятно, просто использовать контейнер-помощник, что-то вроде:

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

Ответ 2

Вы можете уменьшить принятый ответ на одну строку, используя, например,

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

Ответ 3

Вам не нужно запускать какой-либо контейнер для добавления данных в уже существующий именованный том, просто создайте контейнер и скопируйте туда данные:

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