Каков правильный способ добавления данных в существующий именованный том в 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