Bakgrunn
Docker Volume lar oss dynamisk montere noen filer (som konfigurasjonsfiler) for å overskrive de opprinnelige filene i bildet når vi starter en Docker-container, men hva skjer hvis vi monterer en mappe eller fil som ennå ikke eksisterer på verten til containeren? LZ støtte på et slikt problem i sitt arbeid, så han øvde på det selv og registrerte de eksperimentelle resultatene som følger:
Folderfeste
Dockers oppførsel ved mappemontering er ensartet, som følger:
- Hvis mappen ikke eksisterer, opprettes mappen først (eller rekursivt hvis det er en flernivå-mappe)
- Overskriv mappeinnholdet i containeren med mappeinnholdet på verten
Detaljene er som følger:
Mappen på verten eksisterer og er ikke tom
vert | beholder | Resultat for montering | | Ikke-tom mappe A eksisterer | Mappe B som ikke eksisterer | Lag mappe B i Contanier først, og kopier deretter alle filene i mappe A til B | | Ikke-tom mappe A eksisterer | Ikke-tom mappe B eksisterer | Først tømmer du originalinnholdet i container-kinesisk mappe B, og kopierer deretter A kinesisk kopi til B |
Uansett om mappe B i beholderen eksisterer eller ikke, vil A fullstendig overskrive innholdet i B
Mappen på verten eksisterer, men er tom
vert | beholder | Resultat for montering | | Tom mappe A som eksisterer | Ikke-tom mappe B eksisterer | Innholdet i containerens kinesiske mappe B tømmes |
Innholdet i den tilsvarende mappen i beholderen tømmes
Vertsmappen eksisterer ikke
vert | beholder | Resultat for montering | | Mappe A som ikke eksisterer | Ikke-tom mappe B eksisterer | Opprett mappe A på vert, og innholdet i containerens kinesiske mappe B tømmes | | Mapper A/B/C som ikke eksisterer | Ikke-tom mappe B eksisterer | Opprett mapper A/B/C på vert, og innholdet i container-kinesisk mappe B tømmes |
Innholdet i den tilsvarende mappen i beholderen tømmes
sammendrag
Vertsmappen vil definitivt overskrive container-mappen kinesisk:
vert | beholder | Resultat for montering | | Mappen eksisterer ikke/mappen eksisterer, men er tom | Mappen eksisterer ikke/eksisterer, men er tom/eksisterer og er ikke tom | Beholder Kinesisk stykke er dekket (tømt) | | Mappen eksisterer og er ikke tom | Mappen eksisterer ikke/eksisterer, men er tom/eksisterer og er ikke tom | innholdet i container-kinesiske mapper overskrives (det opprinnelige innholdet tømmes, og innholdet i mappen på verten overskrives) |
Filmontering
Den største forskjellen mellom filmontering og mappemontering er:
- Docker forbyr montering av filer som ikke finnes på verten til filer som allerede finnes i containeren
- Filmontering har ingen effekt på andre filer under samme mappe
I tillegg er overskrivingsoppførselen konsistent med mappemontering, altså:
- Overskriv innholdet i filen i beholderen med innholdet i filen på verten
Detaljene er som følger:
vert
vert | beholder | Resultat for montering | | Filer som ikke eksisterer configA.js | Dokumenter som allerede eksisterer congfigB.js | Feil, prøver du å montere en mappe på en fil (eller omvendt)? Sjekk om den angitte vertsstien eksisterer og er forventet type. Den genererer to tomme kataloger configA.js og configB.js på verten samtidig, men containeren kan ikke starte |
vert
vert | beholder | Resultat for montering | | Nåværende fil configA.js | Nåværende fil congfigB.js | containerkinesisk element configB.js forbli det samme, men filinnholdet overskrives av congfigA.js innhold | | Nåværende fil configA.js | Filer som ikke eksisterer congfigB.js | En ny fil configB.js i beholderen med innholdet i den configA.js filen forblir uendret configB.js alle andre filer under filen |
sammendrag
Filen på verten vil alltid overskrive containerens kinesiske mappe
vert | beholder | Resultat for montering | | Filer som ikke eksisterer | Dokumenter som allerede eksisterer | Forbudte handlinger | | Eksisterende dokumenter | Filer som ikke eksisterer / filer som allerede eksisterer | Legg til/overskriv (oppretter en mappe hvis den ikke finnes) |
konklusjon
Folderfeste
- Hvis du tillater ikke-eksisterende eller tomme mapper å monteres i beholderen, vil de tilsvarende mappene i beholderen tømmes
- Å feste en ikke-tom mappe til en beholder vil overskrive den opprinnelige mappen i beholderen
Filmontering
- Det er forbudt å montere ikke-eksisterende filer på filer som allerede finnes i beholderen
- Eksisterende filer vil bli overskrevet når de festes til containeren, og hvis filene ikke eksisterer, vil de bli opprettet
Bruksscenarier
- Fra analysen ovenfor kan man se at mappemontering brukes til å overskrive filer i hele mappen, så det kan brukes når et stort antall filer må monteres i containeren, i tillegg, hvis en tom mappe eller en ikke-eksisterende mappe monteres, brukes det vanligvis motsatt: det vil si at etter at containeren er startet, kan noen filer (som logger) genereres under mappen til monteringspunktet i containeren, og på dette tidspunktet kan den sees direkte i mappen på den tilsvarende verten.
- Filmontering brukes ofte til å montere konfigurasjonsfiler for å dynamisk endre standardkonfigurasjonen under kjøring, fordi det bare overskriver én fil uten å påvirke andre filer i samme mappe i containeren.
Overført fra:Innloggingen med hyperkoblingen er synlig.
(Slutt) |