Baggrund
Docker-volumen tillader os dynamisk at mounte nogle filer (såsom konfigurationsfiler) for at overskrive de oprindelige filer i billedet, når vi starter en docker-container, men hvad sker der, hvis vi monterer en mappe eller fil, der endnu ikke findes på værten, til containeren? LZ stødte på et sådant problem i sit arbejde, så han øvede det selv og registrerede de eksperimentelle resultater som følger:
Faldskærmsbeslag
Dockers adfærd ved mappemontering er ensartet, som følger:
- Hvis mappen ikke eksisterer, oprettes mappen først (eller rekursivt, hvis det er en flerniveau-mappe)
- Overskriv mappeindholdet i containeren med mappeindholdet på host
Detaljerne er som følger:
Mappen på værten eksisterer og er ikke tom
vært | beholder | Mount Resultat | | Ikke-tom mappe A eksisterer | Mappe B, der ikke eksisterer | Opret først mappe B i Contanier, og kopier derefter alle filerne i mappe A til B | | Ikke-tom mappe A eksisterer | Ikke-tom mappe B eksisterer | Først tømmer du det oprindelige indhold i container-kinesisk mappe B, og kopierer derefter A kinesisk kopi til B |
Uanset om mappe B i beholderen eksisterer, vil A fuldstændigt overskrive B's indhold
Mappen på værten eksisterer, men er tom
vært | beholder | Mount Resultat | | Tom mappe A, der eksisterer | Ikke-tom mappe B eksisterer | Indholdet af containerens kinesiske mappe B tømmes |
Indholdet af den tilsvarende mappe i beholderen tømmes
Værtsmappen eksisterer ikke
vært | beholder | Mount Resultat | | Mappe A, der ikke eksisterer | Ikke-tom mappe B eksisterer | Opret mappe A på værten, og indholdet af containerens kinesiske mappe B tømmes | | Mapper A/B/C, der ikke eksisterer | Ikke-tom mappe B eksisterer | Opret mapperne A/B/C på værten, og indholdet af container-kinesisk mappe B tømmes |
Indholdet af den tilsvarende mappe i beholderen tømmes
resumé
Værtsmappen vil helt sikkert overskrive container-mappen kinesisk:
vært | beholder | Mount Resultat | | Mappen eksisterer ikke/mappen eksisterer, men er tom | Mappen eksisterer ikke/eksisterer, men er tom/eksisterer og er ikke tom | Beholder Kinesisk stykke er dækket til (tømt) | | Mappen eksisterer og er ikke tom | Mappen eksisterer ikke/eksisterer, men er tom/eksisterer og er ikke tom | indholdet i containerens kinesiske mappe overskrives (det oprindelige indhold tømmes, og indholdet af mappen på værten overskrives) |
Filmontering
Den største forskel mellem filmontering og mappemontering er:
- Docker forbyder montering af filer, der ikke findes på værten, til filer, der allerede findes i containeren
- Filmontering har ingen effekt på andre filer under samme mappe
Derudover er dens overskrivningsadfærd konsistent med mappemontering, dvs.:
- Overskriv indholdet af filen i containeren med indholdet af filen på værten
Detaljerne er som følger:
vært
vært | beholder | Mount Resultat | | Filer, der ikke eksisterer configA.js | Dokumenter, der allerede eksisterer congfigB.js | Fejl, Prøver du at montere en mappe på en fil (eller omvendt)? Tjek om den specificerede hoststi eksisterer, og om den forventede type er. Den genererer to tomme mapper configA.js og configB.js på værten samtidig, men containeren kan ikke starte |
vært
vært | beholder | Mount Resultat | | Nuværende sag configA.js | Nuværende fil congfigB.js | containerkinesiske elementer configB.js forblive de samme, men filens indhold overskrives af det congfigA.js indhold | | Nuværende sag configA.js | Filer, der ikke eksisterer congfigB.js | En ny fil configB.js i beholderen med indholdet af den configA.js fil forbliver uændret configB.js alle andre filer under filen |
resumé
Filen på værten vil altid overskrive containerens kinesiske mappe
vært | beholder | Mount Resultat | | Filer, der ikke eksisterer | Dokumenter, der allerede eksisterer | Forbudte handlinger | | Eksisterende dokumenter | Filer, der ikke eksisterer / filer, der allerede eksisterer | Tilføje/overskriv (opretter en mappe, hvis den ikke findes) |
konklusion
Faldskærmsbeslag
- Hvis du tillader, at ikke-eksisterende mapper eller tomme mapper monteres i containeren, vil de tilsvarende mapper i containeren blive tømt
- Hvis man vedhæfter en ikke-tom mappe til en container, vil den oprindelige mappe i containeren overskrive
Filmontering
- Det er forbudt at montere ikke-eksisterende filer på filer, der allerede findes i containeren
- Eksisterende filer vil blive overskrevet, når de tilknyttes containeren, og hvis filerne ikke eksisterer, vil de blive oprettet
Anvendelsesscenarier
- Ud fra ovenstående analyse kan man se, at mappemontering bruges til at overskrive filer i hele mappen, så det kan bruges, når et stort antal filer skal monteres i containeren; derudover, hvis en tom mappe eller en ikke-eksisterende mappe monteres, bruges det generelt omvendt: det vil sige, efter containeren er startet, kan nogle filer (såsom logs) genereres under mappen for monteringspunktet i containeren, og på dette tidspunkt kan det ses direkte i mappen på den tilsvarende vært.
- Filmontering bruges ofte til at mounte konfigurationsfiler for dynamisk at ændre standardkonfigurationen under kørsel, fordi det kun overskriver en enkelt fil uden at påvirke andre filer i samme mappe i containeren.
Overført fra:Hyperlink-login er synlig.
(Slut) |