Фон
docker volume позволяет динамически монтировать некоторые файлы (например, файлы конфигурации) при запуске докер-контейнера, чтобы перезаписать оригинальные файлы в образе, но что произойдет, если вы смонтируете в контейнер папку или файл, который еще не существует на хосте? LZ столкнулся с такой проблемой в своей работе, поэтому он применил ее на практике и записал результаты эксперимента следующим образом:
Монтирование папки
Поведение docker при монтировании папок единообразно, как показано ниже:
- Если папка не существует, она будет создана первой (если это многоуровневая папка, она будет создана рекурсивно), перезапишет содержимое папки в контейнере содержимым папки на хосте
Подробные инструкции приведены ниже: Папка на хосте существует и не пуста
хост | контейнер | результат монтирования | Существующая непустая папка A | Несуществующая папка B | Создайте папку B в contanier, затем скопируйте все файлы из папки A в B. | Существующая непустая папка A | Существующая непустая папка B | Очистите содержимое папки B в контейнере, а затем скопируйте файлы из папки A в B. |
Независимо от того, существует ли папка B в контейнере, A полностью перезапишет содержимое B.
Папка на хосте существует, но пуста
хост | контейнер | результат монтирования | Пустая папка A существует | Существует непустая папка B | Содержимое папки B в контейнере очищено. |
Содержимое соответствующей папки в контейнере было очищено.
Папка не существует на хосте
хост | контейнер | результат монтирования | Несуществующая папка A | Существующая непустая папка B | На хосте создается папка A, а содержимое папки B в контейнере очищается. | Несуществующие папки A/B/C | Существующая непустая папка B | Папка A/B/C создается на хосте, а содержимое папки B в контейнере опустошается. |
Содержимое соответствующей папки в контейнере будет опустошено.
Сводка
Папки на хосте должны перезаписывать папки в контейнере: хост | контейнер | результат монтирования | Папка не существует/папка существует, но пуста | Папка не существует/существует, но пуста/существует, но не пуста | Файлы перезаписаны (опустошены) в контейнере | Папка существует и не пуста | Папка не существует/существует, но пуста/существует и не пуста | Содержимое папки контейнера перезаписано (оригинальное содержимое опустошено, перезаписано содержимым папки на хосте) |
Монтирование файлов
Самое большое различие между монтированием файлов и монтированием папок заключается в следующем:
d ocker запрещает монтировать файл, уже существующий в контейнере, с файлом, не существующим на хосте Монтирование файлов не влияет на другие файлы в той же папке
В остальном поведение перезаписи такое же, как и при монтировании папок, т. е:
перезаписать содержимое файла в контейнере содержимым файла на хосте
Подробности следующие: Файл на хосте не существует
хост | контейнер | результат монтирования | Несуществующий файл configA.js | Существующий файл congfigB.js | Вы пытаетесь смонтировать каталог к файлу (или наоборот)? Проверьте, существует ли указанный путь к хосту и имеет ли он ожидаемый тип. На хосте будут созданы две пустые директории configA.js и configB.js, но контейнер не запустится. |
Файл существует на хосте
хост | контейнер | результат монтирования | Существующий файл configA.js | Существующий файл configB.js | Имя файла configB.js в контейнере остается прежним, но его содержимое заменяется содержимым файла congfigA.js. | Существующий файл configA.js | Несуществующий файл congfigB.js. | Контейнер в новом файле configB.js, его содержимое для содержимого файла configA.js, configB.js, где файл под всеми остальными файлами остается неизменным. |
Резюме
Файлы на хосте должны перезаписывать папки в контейнере. хост | контейнер | результат монтирования | Несуществующие файлы | Существующие файлы | Запрещенное поведение | Существующие файлы | Несуществующие файлы/существующие файлы | Добавление/перезапись (каталоги создаются, если они не существуют) |
Заключение
Монтирование папок
позволяет монтировать в контейнер несуществующие папки или существующие пустые папки, при этом соответствующие папки в контейнере будут опустошены Непустые папки, смонтированные в контейнер, перезапишут существующие папки в контейнере
Монтирование файлов
Запрет монтирования несуществующих файлов на существующие файлы в контейнере Существующие файлы, смонтированные на контейнер, перезапишут соответствующие файлы в контейнере, если файл не существует, он будет создан
Сценарии применения
- Из приведенного выше анализа видно, что монтирование папок используется для охвата всей папки, поэтому его можно использовать, когда нужно смонтировать большое количество файлов в контейнер. Кроме того, если вы монтируете пустую или несуществующую папку, то, как правило, можно использовать его для обратного действия: то есть после запуска контейнера можно создать несколько файлов в папке точки монтирования контейнера (например, журналы), а затем смонтировать папку в папке соответствующего хоста. папку на соответствующем хосте.
- Файловое монтирование часто используется для монтирования файлов конфигурации для динамического изменения конфигурации по умолчанию во время выполнения, поскольку оно перезаписывает только один файл и не влияет на другие файлы в той же папке в контейнере.
Получено с сайта https://m.ancii.com/av94mq7pz.
(конец) |