Fond
Volumul Docker ne permite să montăm dinamic unele fișiere (cum ar fi fișierele de configurare) pentru a suprascrie fișierele originale din imagine atunci când pornim un container Docker, dar ce se întâmplă dacă montăm un folder sau un fișier care încă nu există pe gazdă în container? LZ a întâmpinat o astfel de problemă în lucrările sale, așa că a exersat-o singur și a înregistrat rezultatele experimentale astfel:
Montare pentru foldere
Comportamentul Docker la montarea folderelor este uniform, după cum urmează:
- Dacă folderul nu există, acesta este creat mai întâi (sau recursiv dacă este un folder multinivel)
- Suprascrie conținutul folderului în container cu conținutul folderului pe gazdă
Detaliile sunt următoarele:
Folderul de pe gazdă există și nu este gol
gazdă | container | Rezultatul montajului | | Există folderul negolit A | Folderul B care nu există | Creează mai întâi folderul B în contanier, apoi copiază toate fișierele din folderul A în B | | Există folderul negolit A | Folderul negol B există | Mai întâi, golește conținutul original al folderului container chinezesc B, apoi copiază copia chineză A în B |
Indiferent dacă folderul B există sau nu, A va suprascrie complet conținutul lui B
Folderul de pe host există, dar este gol
gazdă | container | Rezultatul montajului | | Dosarul A gol care există | Folderul negol B există | Conținutul containerului din dosarul chinezesc B este golit |
Conținutul folderului corespunzător din container este golit
Folderul gazdă nu există
gazdă | container | Rezultatul montajului | | Folderul A care nu există | Folderul negol B există | Creează folderul A pe gazdă, iar conținutul folderului chinezesc container B este golit | | Foldere A/B/C care nu există | Folderul negol B există | Creează folderele A/B/C pe gazdă, iar conținutul folderului container Chinese B este golit |
Conținutul folderului corespunzător din container este golit
rezumat
Folderul gazdă va suprascrie cu siguranță folderul chinezesc container:
gazdă | container | Rezultatul montajului | | Folderul nu există/folderul există, dar este gol | Folderul nu există/există, dar este gol/există și nu este gol | Bucata chinezească din container este acoperită (golită) | | Folderul există și nu este gol | Folderul nu există/există, dar este gol/există și nu este gol | conținutul folderului chinezesc container este suprascris (conținutul original este golit, iar conținutul folderului de pe gazdă este suprascris) |
Montare de fișier
Cea mai mare diferență între montarea fișierelor și montarea folderelor este:
- Docker interzice montarea fișierelor care nu există pe gazdă către fișiere care deja există în container
- Montarea fișierelor nu are niciun efect asupra celorlalte fișiere din același folder
În plus, comportamentul său de suprascriere este consistent cu montarea folderelor, adică:
- Suprascrie conținutul fișierului din container cu conținutul fișierului de pe gazdă
Detaliile sunt următoarele:
gazdă
gazdă | container | Rezultatul montajului | | Fișiere care nu există configA.js | Documente care deja există congfigB.js | Eroare, încerci să montezi un director pe un fișier (sau invers)? Verifică dacă calea gazdă specificată există și este tipul așteptat. Generează două directoare goale configA.js și configB.js pe gazdă în același timp, dar containerul nu poate porni |
gazdă
gazdă | container | Rezultatul montajului | | Dosarul prezent configA.js | Dosar prezent congfigB.js | elementul container chinezesc configB.js rămâne aceleași, dar conținutul fișierului este suprascris de conținutul congfigA.js | | Dosarul prezent configA.js | Fișiere care nu există congfigB.js | Un fișier nou configB.js în container împreună cu conținutul fișierului configA.js rămâne neschimbat configB.js toate celelalte fișiere din fișier |
rezumat
Fișierul de pe gazdă va suprascrie întotdeauna folderul chinezesc al containerului
gazdă | container | Rezultatul montajului | | Fișiere care nu există | Documente care există deja | Acte interzise | | Documente care există | Fișiere care nu există / fișiere care există deja | Adaugă/suprascrie (creează un director dacă nu există) |
concluzie
Montare pentru foldere
- Dacă permiți montarea folderelor inexistente sau a folderelor goale în container, folderele corespunzătoare din container vor fi golite
- Atașarea unui folder negolit la un container va suprascrie folderul original din container
Montare de fișier
- Este interzis să se monteze fișiere inexistente pe fișiere care deja există în container
- Fișierele existente vor fi suprascrise când sunt atașate containerului, iar dacă fișierele nu există, ele vor fi create
Scenarii de aplicație
- Din analiza de mai sus, se poate observa că montarea folderului este folosită pentru a suprascrie fișierele din întregul folder, deci poate fi folosită atunci când trebuie montate un număr mare de fișiere în container; în plus, dacă este montat un folder gol sau inexistent, este folosit în general invers: adică, după ce containerul este pornit, unele fișiere (cum ar fi jurnalele) pot fi generate sub folderul punctului de montare din container și, în acest moment, pot fi văzute direct în folderul de pe gazda corespunzătoare.
- Montarea fișierelor este adesea folosită pentru a monta fișiere de configurare pentru a modifica dinamic configurația implicită la rulare, deoarece suprascrie doar un singur fișier fără a afecta celelalte fișiere din același folder din container.
Transferat din:Autentificarea cu hyperlink este vizibilă.
(Sfârșit) |