Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 9379|Відповідь: 0

Файл або папка не існує, коли змонтований том Docker

[Копіювати посилання]
Опубліковано 08.11.2021 09:20:35 | | |
Тло

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

кріплення папки

Поведінка Docker при кріпленні папок є однорідною, наступним чином:

  • Якщо папки немає, спочатку створюється папка (або рекурсивно, якщо це багаторівнева папка).
  • Перезапишіть вміст папки в контейнері на вміст папки на хості


Деталі такі:

Папка на хості існує і не є порожньою

господар
контейнер
Результат маунту
Існує непорожня папка AПапка B, якої не існуєСпочатку створіть папку 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 всіх інших файлів у цьому файлі

зведення

Файл на хості завжди перезаписує китайську папку контейнера

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

висновок

кріплення папки

  • Якщо дозволити монтувати неіснуючі або порожні папки в контейнері, відповідні папки в контейнері будуть порожніми
  • Приєднання непорожньої папки до контейнера перезапише оригінальну папку в контейнері

Кріплення файла

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

Сценарії застосування

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

Переведено з:Вхід за гіперпосиланням видно.

(Кінець)




Попередній:Elasticsearch використовує elasticdump для резервного копіювання та міграції даних
Наступний:Docker POI error exception solution
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com