Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 9379|Ответ: 0

Файл или папка отсутствуют, когда том Docker монтирован

[Скопировать ссылку]
Опубликовано 08.11.2021 9:20:35 | | |
Фон

Docker Volume позволяет динамически монтировать некоторые файлы (например, конфигурационные), чтобы перезаписать исходные файлы в образе при запуске docker-контейнера, но что происходит, если мы смонтируем папку или файл, который ещё не существует на хосте, в контейнер? LZ столкнулся с такой проблемой в своей работе, поэтому практиковал её сам и записал экспериментальные результаты следующим образом:

Крепление папки

Поведение Docker при креплении папок равномерное, следующим образом:

  • Если папки нет, она создаётся сначала (или рекурсивно, если это многоуровневая).
  • Перезапишите содержимое папки в контейнере содержимым папки на хосте


Детали следующие:

Папка на хосте существует и не пуста

хозяин
контейнер
Результат маунта
Существует непустая папка AПапка B, которой не существуетСначала создайте папку B в Contanier, а затем скопируйте все файлы из папки A в B
Существует непустая папка AСуществует непустая папка BСначала очистите оригинальное содержимое китайской папки контейнера B, а затем скопируйте китайскую копию A в B

Независимо от существования папки B в контейнере, A полностью перезаписывает содержимое B

Папка на хосте существует, но пуста

хозяин
контейнер
Результат маунта
Пустая папка A, которая существует.Существует непустая папка BСодержимое китайской папки B в контейнере опустошено

Содержимое соответствующей папки в контейнере опустошается

Папка host не существует

хозяин
контейнер
Результат маунта
Папка А, которой не существуетСуществует непустая папка BСоздайте папку A на хосте, и содержимое китайской папки контейнера B будет опустошено
Папки A/B/C, которые не существуютСуществует непустая папка BСоздайте папки A/B/C на хоста, и содержимое китайской папки контейнера B будет опустошено

Содержимое соответствующей папки в контейнере опустошается

сводка

Папка хоста точно перезапишет китайскую папку контейнера:

хозяин
контейнер
Результат маунта
Папка не существует/папка существует, но пустаПапка не существует/существует, но она пуста/существует и не пустаконтейнер Китайский кусок накрыт (опустошается)
Папка существует и не пустаПапка не существует/существует, но она пуста/существует и не пустаСодержимое китайских папок контейнера перезаписывается (исходное содержимое опустошается, а содержимое папки на хосте перезаписывается)

Крепление для напильника

Самое большое отличие между монтажом файлов и папок такова:

  • Docker запрещает монтировать файлы, которых нет на хосте, в файлы, уже существующие в контейнере
  • Монтирование файла никак не влияет на другие файлы в той же папке

Кроме того, его поведение при перезаписи соответствует монтированию папок, то есть:

  • Перезапишите содержимое файла в контейнере содержимым файла на хосте


Детали следующие:

хозяин

хозяин
контейнер
Результат маунта
Файлы, которые не существуют configA.jsДокументы, которые уже существуют congfigB.jsОшибка: Вы пытаетесь смонтировать каталог в файл (или наоборот)? Проверьте, существует ли указанный путь хоста и соответствует ли ожидаемому типу. Он одновременно генерирует два пустых каталога configA.js и configB.js на хосте, но контейнер не может запуститься

хозяин

хозяин
контейнер
Результат маунта
Текущий файл configA.jsТекущий файл congfigB.jsконтейнер китайский товар configB.js остаётся прежним, но содержимое файла перезаписывается содержимым congfigA.js
Текущий файл configA.jsФайлы, которые не существуют congfigB.jsНовый файл configB.js в контейнере с содержимым configA.js файла остаётся неизменным, configB.js всех остальных файлов в этом файле

сводка

Файл на хосте всегда перезаписывает китайскую папку контейнера

хозяин
контейнер
Результат маунта
Файлы, которых не существуетДокументы, которые уже существуютЗапрещённые действия
Существующие документыФайлы, которых не существует / файлы, которые уже существуютДобавлять/перезаписывать (создавать каталог, если её нет)

заключение

Крепление папки

  • Если разрешить монтировать несуществующие или пустые папки в контейнере, соответствующие папки в контейнере будут опустошены
  • Прикрепление непустой папки к контейнеру перезапишет исходную папку в контейнере

Крепление для напильника

  • Запрещено монтировать несуществующие файлы на файлы, которые уже существуют в контейнере
  • Существующие файлы перезаписываются при присоединении к контейнеру, и если их не существует, они будут созданы

Сценарии применения

  • Из приведённого выше анализа видно, что монтирование папок используется для перезаписи файлов во всей папке, поэтому его можно использовать, когда необходимо смонтировать большое количество файлов в контейнер, кроме того, если монтируется пустая или несуществующая папка, обычно используется в обратном порядке: то есть после запуска контейнера некоторые файлы (например, журналы) могут генерироваться под папкой точки монтажа в контейнере, и в этот момент их можно напрямую увидеть в папке на соответствующем хосте.
  • Монтирование файлов часто используется для монтажа конфигурационных файлов с целью динамической модификации настройки по умолчанию во время выполнения, поскольку оно перезаписывает только один файл, не затрагивая другие файлы в той же папке в контейнере.

Переведён из:Вход по гиперссылке виден.

(Конец)




Предыдущий:Elasticsearch использует elasticdump для резервного копирования и миграции данных
Следующий:Решение исключения ошибок Docker POI
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com