Bakgrund
Docker-volymen låter oss dynamiskt montera vissa filer (som konfigurationsfiler) för att skriva över originalfilerna i bilden när vi startar en docker-container, men vad händer om vi monterar en mapp eller fil som ännu inte finns på värden till containern? LZ stötte på ett sådant problem i sitt arbete, så han övade själv på det och antecknade de experimentella resultaten enligt följande:
Mappfäste
Dockers beteende vid mappmontering är enhetligt, enligt följande:
- Om mappen inte finns skapas mappen först (eller rekursivt om det är en flernivåmapp)
- Skriv över mappens innehåll i container med mappinnehållet på värden
Detaljerna är följande:
Mappen på värden finns och är inte tom
värd | behållare | Resultat av monteringen | | Icke-tom mapp A existerar | Mapp B som inte existerar | Skapa mapp B i Contanier först, och kopiera sedan alla filer i mapp A till B | | Icke-tom mapp A existerar | Icke-tom mapp B existerar | Töm först originalinnehållet i containermappen Kinesisk B och kopiera sedan A kinesisk kopia till B |
Oavsett om mapp B i containern existerar, kommer A att skriva över B:s innehåll helt
Mappen på värden finns, men är tom
värd | behållare | Resultat av monteringen | | Tom mapp A som finns | Icke-tom mapp B existerar | Innehållet i container-mappen Kinesisk B töms |
Innehållet i motsvarande mapp i behållaren töms
Värdmappen finns inte
värd | behållare | Resultat av monteringen | | Mapp A som inte existerar | Icke-tom mapp B existerar | Skapa mapp A på värden, och innehållet i containerns kinesiska mapp B töms | | Mappar A/B/C som inte existerar | Icke-tom mapp B existerar | Skapa mappar A/B/C på värden, och innehållet i container-kinesiska mapp B töms |
Innehållet i motsvarande mapp i behållaren töms
sammanfattning
Värdmappen kommer definitivt att skriva över containerns kinesiska mapp:
värd | behållare | Resultat av monteringen | | Mappen finns inte/mappen finns men är tom | Mappen existerar inte/existerar men är tom/existerar och är inte tom | Behållare Kinesisk bit täcks (töms) | | Mappen finns och är inte tom | Mappen existerar inte/existerar men är tom/existerar och är inte tom | innehållet i containerkinesiska mappar skrivs över (originalinnehållet töms och innehållet i mappen på värden skrivs över) |
Filmontering
Den största skillnaden mellan filmontering och mappmontering är:
- Docker förbjuder att montera filer som inte finns på värden till filer som redan finns i containern
- Filmontering har ingen effekt på andra filer under samma mapp
Dessutom är dess överskrivningsbeteende förenligt med mappmontering, dvs.:
- Skriv över innehållet i filen i containern med innehållet i filen på värden
Detaljerna är följande:
värd
värd | behållare | Resultat av monteringen | | Filer som inte existerar configA.js | Dokument som redan finns congfigB.js | Fel, försöker du montera en katalog på en fil (eller tvärtom)? Kontrollera om den specificerade värdvägen finns och är den förväntade typen. Den genererar två tomma kataloger configA.js och configB.js på värden samtidigt, men containern kan inte starta |
värd
värd | behållare | Resultat av monteringen | | Nuvarande akt configA.js | Nuvarande akt congfigB.js | containerkinesiska objekt configB.js förbli detsamma, men filinnehållet skrivs över av congfigA.js innehåll | | Nuvarande akt configA.js | Filer som inte existerar congfigB.js | En ny fil configB.js i containern med innehållet i den configA.js filen förblir oförändrad configB.js alla andra filer under filen |
sammanfattning
Filen på värddatorn skriver alltid över containermappen på kinesiska
värd | behållare | Resultat av monteringen | | Filer som inte existerar | Dokument som redan finns | Förbjudna handlingar | | Dokument som finns | Filer som inte finns / filer som redan finns | Lägg till/överskriv (skapar en katalog om den inte finns) |
slutsats
Mappfäste
- Om du tillåter icke-existerande mappar eller tomma mappar att monteras i containern, kommer motsvarande mappar i containern att tömmas
- Att bifoga en icke-tom mapp till en container kommer att skriva över den ursprungliga mappen i containern
Filmontering
- Det är förbjudet att montera icke-existerande filer på filer som redan finns i containern
- Befintliga filer skrivs över när de kopplas till containern, och om filerna inte finns kommer de att skapas
Tillämpningsscenarier
- Av ovanstående analys kan man se att mappmontering används för att skriva över filer i hela mappen, så det kan användas när ett stort antal filer behöver monteras i containern, dessutom, om en tom mapp eller en icke-existerande mapp monteras, används det vanligtvis omvänt: det vill säga, efter att containern startats kan vissa filer (såsom loggar) genereras under mappen för monteringspunkten i containern, och vid denna tidpunkt kan den ses direkt i mappen på motsvarande värd.
- Filmontering används ofta för att montera konfigurationsfiler för att dynamiskt ändra standardkonfigurationen vid körning eftersom det bara skriver över en enda fil utan att påverka andra filer i samma mapp i containern.
Överförd från:Inloggningen med hyperlänken är synlig.
(Slut) |