Docker громкость ведет себя по-разному с разными изображениями - PullRequest
1 голос
/ 20 июня 2020

Я новичок в docker и мне нужно понять, что касается docker поведения объемов

Я получаю разные результаты с nginx и jenkins

Сценарий 1: с «nginx "image

# docker volume create testvol
testvol
# cd /var/lib/docker/volumes/testvol/_data/
# touch newfile1 newfile2
# ls
newfile1  newfile2

# docker run -it -v testvol:/usr/share/nginx/html nginx bash
# cd usr/share/nginx/html/
# ls
newfile1  newfile2

Здесь внутри контейнера в / usr / share / nginx / html / файлы копируются с тома (newfile1, newfile2), но файлы по умолчанию nginx удалены (50x. html index. html)

Сценарий 2: с изображением Дженкинса

Использование того же объема testvol

# docker run -it -v testvol:/var/jenkins_home jenkins/jenkins bash
# cd /var/jenkins_home
# ls
copy_reference_file.log  newfile1  newfile2

Здесь, внутри контейнера, исходный файл сохраняется внутри контейнера Дженкинса ( copy_reference_file.log) и файлы копируются с тома (newfile1, newfile2)

Почему такая разница или я неправильно ее понимаю?

1 Ответ

2 голосов
/ 20 июня 2020

Источник изображения Jenkins Docker находится на GitHub. Если вы посмотрите на его Dockerfile , который имеет строку ближе к концу

ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/jenkins.sh"]

Когда вы затем

docker run ... jenkinsci/jenkinsci bash

, bash становится командой изображения, которая получает , переданный в качестве дополнительного параметра точке входа , а Docker запускает эту комбинированную команду. Скрипт jenkins. sh, в свою очередь, начинается с

: "${JENKINS_HOME:="/var/jenkins_home"}"
: "${COPY_REFERENCE_FILE_LOG:="${JENKINS_HOME}/copy_reference_file.log"}"
touch "${COPY_REFERENCE_FILE_LOG}"

И поэтому во втором примере файл copy_reference_file.log существует.

Когда вы создаете контейнер:

  • Если Dockerfile объявляет VOLUME и в этом каталоге больше ничего не смонтировано, Docker создает новый пустой анонимный том.
  • Если именованный или анонимный том (но не привязка) монтируется в контейнер, и этот том пуст, содержимое образа копируется в том.
  • Отсюда том заменяет соответствующую часть файловой системы контейнера на выход; читает и записывает в этот каталог go том (или подключаемый к привязке каталог хоста).

Тома не"проходят через" образ; содержимое копируется в том только при первом использовании пустого тома. Если вы возьмете свой пример и повторно запустите контейнер nginx с тем же томом, вы увидите, что copy_reference_file.log все еще существует в томе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...