Том Docker пуст

#docker

#docker

Вопрос:

При использовании -v switch файлы из контейнера должны быть скопированы на локальный хост, верно? Но похоже, что каталог jenkins_home вообще не создан.

Если я создаю jenkins_home каталог вручную, а затем монтирую его, каталог по-прежнему пуст.

Я хочу сохранить конфигурации jenkins, чтобы позже я мог повторно запустить image.

 docker run -p 8080:8080 -p 50000:50000 -d -v jenkins_home:/var/jenkins_home jenkins/jenkins:latest
 

Ответ №1:

Если у вас docker run -v jenkins_home:... в первой половине -v параметра вообще нет косых черт, этот синтаксис создает именованный том Docker; это не привязка.

Если вы docker run -v "$PWD/jenkins_home:..." затем этот каталог хоста монтируется поверх соответствующего каталога контейнера. Во время запуска ничего не копируется в каталог хоста; если каталог хоста пуст, этот пустой каталог монтируется в контейнер, скрывая все, что было в образе.

Если вы используете docker run -v named-volume:... синтаксис, и именованный том пуст, то только в этом случае и только при первом запуске контейнера содержимое образа копируется в именованный том. Это не работает для монтирования привязки и не работает, если в томе уже есть данные (возможно, из предыдущего docker run ). Он также не работает в других контейнерных средах, таких как Kubernetes. Я не рекомендую полагаться на это поведение.

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

 cd jenkins_home

docker run             
  --rm                  # clean up this container when done
  -w /var/jenkins_home  # set the current container directory
  jenkins/jenkins       # the image to run
  tar cf - .            # write a tar file to stdout
| tar xf -               # and unpack it on the host

# Now launch the container as normal
docker run -d -p ... -v "$PWD:/var/jenkins_home" jenkins/jenkins
 

Ответ №2:

Понял это.

Оказалось, что по умолчанию он создает том в /var/lib/docker/volumes/jenkins_home/ , а не в текущем каталоге.

Также я пробовал docker volume create jenkins_home перед запуском образа docker для монтирования. Так что не уверен -v jenkins_home:/var/jenkins_home , был ли это тот или docker create volume тот, в котором был создан каталог /var/lib/docker/volumes/ .

Комментарии:

1. Если вы явно не docker volume create изменили объем, docker run -v volume-name:... он создаст его для вас. Любой из них создаст каталог внутри дерева каталогов Docker private implementation-details-subject-to-change.