Ozadje
Dockerjev volumen nam omogoča, da dinamično pritrdimo nekatere datoteke (kot so konfiguracijske datoteke), da prepišemo izvirne datoteke v sliki ob zagonu docker vsebnika, vendar kaj se zgodi, če mapo ali datoteko, ki še ne obstaja na gostitelju, pritrdimo na ta kontejner? LZ se je s takšno težavo srečal pri svojem delu, zato jo je sam vadil in eksperimentalne rezultate zabeležil takole:
nosilec za mape
Dockerjevo vedenje pri pritrjevanju map je enotno, kot sledi:
- Če mapa ne obstaja, se najprej ustvari (ali rekurzivno, če gre za večnivojsko mapo)
- Prepiši vsebino mape v kontejnerju z vsebino mape na gostitelju
Podrobnosti so naslednje:
Mapa na gostitelju obstaja in ni prazna
gostitelj | vsebnik | Rezultat montaže | | Obstaja neprazna mapa A | Mapa B, ki ne obstaja | Najprej ustvari mapo B v contanierju, nato pa kopiraj vse datoteke iz mape A v B | | Obstaja neprazna mapa A | Obstaja neprazna mapa B | Najprej izpraznite izvirno vsebino kitajske mape B, nato pa kopirajte kopijo A v B |
Ne glede na to, ali mapa B v vsebniku obstaja, bo A popolnoma prepisala vsebino B
Mapa na gostitelju obstaja, vendar je prazna
gostitelj | vsebnik | Rezultat montaže | | Prazna mapa A, ki obstaja | Obstaja neprazna mapa B | Vsebina kitajske mape B je izpraznjena |
Vsebina ustrezne mape v kontejnerju se izprazni
Mapa gostitelja ne obstaja
gostitelj | vsebnik | Rezultat montaže | | Mapa A, ki ne obstaja | Obstaja neprazna mapa B | Ustvari mapo A na gostitelju, vsebina kitajske mape B pa se izprazni | | Mape A/B/C, ki ne obstajajo | Obstaja neprazna mapa B | Ustvari mape A/B/C na gostitelju, vsebina kitajske mape B pa se izprazni |
Vsebina ustrezne mape v kontejnerju se izprazni
Povzetek
Gostiteljska mapa bo zagotovo prepisala kitajsko mapo v kontejnerju:
gostitelj | vsebnik | Rezultat montaže | | Mapa ne obstaja/mapa obstaja, ampak je prazna | Mapa ne obstaja/ne obstaja, ampak je prazna/obstaja in ni prazna | posoda za kitajski kos je pokrita (izpraznjena) | | Mapa obstaja in ni prazna | Mapa ne obstaja/ne obstaja, ampak je prazna/obstaja in ni prazna | vsebina map v kontejnerju je prepisana (izvirna vsebina se izprazni, vsebina mape na gostitelju pa se prepiše) |
Nosilec datoteke
Največja razlika med nameščanjem datotek in montažo map je:
- Docker prepoveduje prirejanje datotek, ki na gostitelju ne obstajajo, na datoteke, ki že obstajajo v vsebniku
- Prilepljanje datotek nima vpliva na druge datoteke v isti mapi
Poleg tega je njegovo prepisovanje skladno z nameščanjem map, tj.
- Prepišite vsebino datoteke v kontejnerju z vsebino datoteke na gostitelju
Podrobnosti so naslednje:
gostitelj
gostitelj | vsebnik | Rezultat montaže | | Datoteke, ki ne obstajajo configA.js | Dokumenti, ki že obstajajo congfigB.js | Napaka, Ali poskušate priklopiti mapo na datoteko (ali obratno)? Preverite, ali določena pot gostitelja obstaja in ali je pričakovani tip. Hkrati ustvari dve prazni mapi configA.js in configB.js na gostitelju, vendar kontejner ne more zagnati |
gostitelj
gostitelj | vsebnik | Rezultat montaže | | Trenutni configA.js | Trenutni congfigB.js | kontejner kitajski predmet configB.js ostane enak, vendar je vsebina datoteke prepisana z vsebino congfigA.js | | Trenutni configA.js | Datoteke, ki ne obstajajo congfigB.js | Nova datoteka, configB.js v vsebniku z vsebino configA.js datoteke, ostane nespremenjena configB.js vse druge datoteke pod datoteko |
Povzetek
Datoteka na gostitelju bo vedno prepisala mapo za kitajsko posodo
gostitelj | vsebnik | Rezultat montaže | | Datoteke, ki ne obstajajo | Dokumenti, ki že obstajajo | Prepovedana dejanja | | Obstoječi dokumenti | Datoteke, ki ne obstajajo / datoteke, ki že obstajajo | Dodajanje/prepisovanje (ustvari imenik, če ne obstaja) |
Sklep
nosilec za mape
- Če dovolite, da se neobstoječe mape ali prazne mape pritrdijo v kontejner, se ustrezne mape v kontejnerju izpraznijo
- Dodajanje neprazne mape na vsebnik bo prepisalo izvirno mapo v vsebniku
Nosilec datoteke
- Prepovedano je nameščati neobstoječe datoteke na datoteke, ki že obstajajo v kontejnerju
- Obstoječe datoteke bodo prepisane, ko so priključene na kontejner, in če datotek ne obstajajo, bodo ustvarjene
Scenariji uporabe
- Iz zgornje analize je razvidno, da se nameščanje map uporablja za prepisovanje datotek v celotni mapi, zato se lahko uporabi, kadar je treba v kontejner priklopiti veliko število datotek, poleg tega pa, če je priklopljena prazna mapa ali neobstoječa mapa, se običajno uporablja obratno: to pomeni, da se po zagonu vsebnika lahko pod mapo pritrdilne točke v vsebniku ustvarijo nekatere datoteke (kot so dnevniki), ki jih je mogoče neposredno videti v mapi na ustreznem gostitelju.
- Nameščanje datotek se pogosto uporablja za montažo konfiguracijskih datotek za dinamično spreminjanje privzete konfiguracije med izvajanjem, saj prepiše le eno datoteko, ne da bi vplival na druge datoteke v isti mapi v vsebniku.
Preneseno iz:Prijava do hiperpovezave je vidna.
(Konec) |