Я использовал 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
?
docker volume inspect my-jenkins-volume --format '{{.Mountpoint}}'
чтобы узнать ее физическое местоположение. Тем не менее, это не кажется хорошей идеей.docker cp
а затем удалить./var/lib/docker/volumes/my-jenkins-volume/_data
при использовании Docker для Mac не работает, потому что файлы хранятся внутри виртуальной машины xhyve . См. Forum.docker.com/t/var-lib-docker-does-not-exist-on-host/18314Вы можете сократить принятый ответ до одной строки, используя, например,
источник
-v `pwd`:/src
означает ли это, что команда выполняется на хосте? (Как может карта хоста,pwd
если это, например, другая машина? - не может.) Если команда docker не запущена на хосте, это не сработает. Я считаю, что именно поэтому у нас есть docker cp. Похоже, что это не «путь» для докера - это просто особый случай, который работает только тогда, когда команда docker выполняется на хосте. Я правильно понял?pwd
должен разрешиться в файл на хост-машине. Из документации по монтированию докеров: «В случае монтирования с привязкой первое поле - это путь к файлу или каталогу на хост-машине».pwd
который даже не должен существовать на удаленном хосте. Вместо этого решение Дмитрия Мельничука (create + cp + rm) копирует локальные в контейнер независимо от того, где он запущен.Вам не нужно запускать какой-либо контейнер для добавления данных в уже существующий именованный том, просто создайте контейнер и скопируйте туда данные:
источник
hello-world
и это тоже работает.busybox
составляет 1,22 МБ. Вместо этогоhello-world
13,3 КБ. Возникает вопрос: можно ли создать Docker-файл с нуля, используя «ничего» в качестве образа, так же, как мы можем просто «смонтировать» том и никогда не запускать контейнер?docker cp
являетсяdocker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
Вот шаги для копирования содержимого ~ / data в том докера с именем my-vol.
Шаг 1. Присоедините том к «временному» контейнеру. Для этого запустите в терминале эту команду:
docker run --rm -it --name alpine --mount type=volume,source=my-vol,target=/data alpine
Шаг 2. Скопируйте содержимое ~ / data в my-vol . Для этого запустите эти команды в новом окне терминала:
cd ~/data docker cp . alpine:/data
Это скопирует содержимое ~ / data в том my-vol . После копирования выйдите из временного контейнера.
источник