Фон
Docker volume ни позволява динамично да монтираме някои файлове (като конфигурационни файлове), за да презапишем оригиналните файлове в образа при стартиране на docker контейнер, но какво се случва, ако монтираме папка или файл, който все още не съществува на хоста, към контейнера? LZ се сблъска с такъв проблем в работата си, затова го практикува сам и записва експерименталните резултати по следния начин:
Монтаж на папката
Поведението на Docker при монтиране на папки е равномерно, както следва:
- Ако папката не съществува, папката се създава първо (или рекурсивно, ако е многостепенна папка).
- Презапишете съдържанието на папката в контейнера с съдържанието на папката на хоста
Подробностите са следните:
Папката на хоста съществува и не е празна
домакин | контейнер | Резултат от маунт | | Съществува непразна папка A | Папка Б, която не съществува | Първо създай папка B в contanier, а след това копирай всички файлове в папка A в B | | Съществува непразна папка A | Съществува непразна папка B | Първо изпразни оригиналното съдържание на китайската папка B в контейнера, а след това копирай китайско копие A в B |
Независимо дали съществува папка B в контейнера, A напълно ще презапише съдържанието на B
Папката на хоста съществува, но е празна
домакин | контейнер | Резултат от маунт | | Празна папка А, която съществува | Съществува непразна папка 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 всички останали файлове под файла |
резюме
Файлът на хоста винаги ще презаписва китайската папка в контейнера
домакин | контейнер | Резултат от маунт | | Файлове, които не съществуват | Документи, които вече съществуват | Забранени действия | | Съществуващи документи | Файлове, които не съществуват / файлове, които вече съществуват | Добавяне/презаписване (създаване на директория, ако не съществува) |
извод
Монтаж на папката
- Ако позволите несъществуващи или празни папки да бъдат монтирани в контейнера, съответните папки в контейнера ще бъдат изпразнени
- Прикачването на непразна папка към контейнер ще презапише оригиналната папка в контейнера
Монтаж на файла
- Забранено е монтирането на несъществуващи файлове върху файлове, които вече съществуват в контейнера
- Съществуващите файлове ще бъдат презаписани, когато са прикачени към контейнера, и ако файловете не съществуват, те ще бъдат създадени
Сценарии на приложение
- От горния анализ се вижда, че монтажът на папки се използва за презаписване на файлове в цялата папка, така че може да се използва, когато трябва да се монтират голям брой файлове в контейнера, освен това, ако се монтира празна или несъществуваща папка, обикновено се използва обратно: тоест, след стартиране на контейнера, някои файлове (като логове) могат да се генерират под папката на монтажната точка в контейнера и в този момент могат да се видят директно в папката на съответния хост.
- Монтажът на файлове често се използва за монтиране на конфигурационни файлове с цел динамично модифициране на стандартната конфигурация по време на изпълнение, тъй като презаписва само един файл, без да засяга други файлове в същата папка в контейнера.
Прехвърлен от:Входът към хиперлинк е видим.
(Край) |