Фон
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 всех остальных файлов в этом файле |
сводка
Файл на хосте всегда перезаписывает китайскую папку контейнера
хозяин | контейнер | Результат маунта | | Файлы, которых не существует | Документы, которые уже существуют | Запрещённые действия | | Существующие документы | Файлы, которых не существует / файлы, которые уже существуют | Добавлять/перезаписывать (создавать каталог, если её нет) |
заключение
Крепление папки
- Если разрешить монтировать несуществующие или пустые папки в контейнере, соответствующие папки в контейнере будут опустошены
- Прикрепление непустой папки к контейнеру перезапишет исходную папку в контейнере
Крепление для напильника
- Запрещено монтировать несуществующие файлы на файлы, которые уже существуют в контейнере
- Существующие файлы перезаписываются при присоединении к контейнеру, и если их не существует, они будут созданы
Сценарии применения
- Из приведённого выше анализа видно, что монтирование папок используется для перезаписи файлов во всей папке, поэтому его можно использовать, когда необходимо смонтировать большое количество файлов в контейнер, кроме того, если монтируется пустая или несуществующая папка, обычно используется в обратном порядке: то есть после запуска контейнера некоторые файлы (например, журналы) могут генерироваться под папкой точки монтажа в контейнере, и в этот момент их можно напрямую увидеть в папке на соответствующем хосте.
- Монтирование файлов часто используется для монтажа конфигурационных файлов с целью динамической модификации настройки по умолчанию во время выполнения, поскольку оно перезаписывает только один файл, не затрагивая другие файлы в той же папке в контейнере.
Переведён из:Вход по гиперссылке виден.
(Конец) |