Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 9379|Antwoord: 0

Het bestand of de map bestaat niet wanneer het Docker-volume wordt gemounted

[Link kopiëren]
Geplaatst op 08-11-2021 09:20:35 | | |
Achtergrond

Docker Volume stelt ons in staat om bepaalde bestanden (zoals configuratiebestanden) dynamisch te mounten om de originele bestanden in de image te overschrijven bij het starten van een docker-container, maar wat gebeurt er als we een map of bestand dat nog niet op de host bestaat aan de container koppelen? LZ kwam dit probleem tegen in zijn werk, dus oefende hij het zelf en noteerde de experimentele resultaten als volgt:

Vouwhouder

Het gedrag van Docker bij het monteren van mappen is uniform, als volgt:

  • Als de map niet bestaat, wordt deze eerst aangemaakt (of recursief als het een meerlagige map is)
  • Overschrijf de mapinhoud in de container met de mapinhoud op host


De details zijn als volgt:

De map op de host bestaat en is niet leeg

gastheer
container
Mount resultaat
Er bestaat niet-lege map AMap B die niet bestaatMaak eerst map B aan in Contanier, en kopieer daarna alle bestanden in map A naar B
Er bestaat niet-lege map AEr bestaat niet-lege map BMaak eerst de originele inhoud van de containermap Chinese-map B leeg en kopieer vervolgens A Chinese kopie naar B

Ongeacht of map B in de container bestaat of niet, zal A de inhoud van B volledig overschrijven

De map op host bestaat, maar is leeg

gastheer
container
Mount resultaat
Lege map A die bestaatEr bestaat niet-lege map BDe inhoud van container Chinese map B wordt geleegd

De inhoud van de bijbehorende map in de container wordt geleegd

De hostmap bestaat niet

gastheer
container
Mount resultaat
Map A die niet bestaatEr bestaat niet-lege map BMaak map A aan op host, en de inhoud van container Chinese map B wordt geleegd
Mappen A/B/C die niet bestaanEr bestaat niet-lege map BMaak mappen A/B/C aan op de host, en de inhoud van container Chinese map B wordt leeggehaald

De inhoud van de bijbehorende map in de container wordt geleegd

samenvatting

De hostmap zal zeker de containermap Chinese overschrijven:

gastheer
container
Mount resultaat
Map bestaat niet/map bestaat maar is leegDe map bestaat niet/bestaat maar is leeg/bestaat en is niet leegContainer Chinese stuk is afgedekt (leeggemaakt)
De map bestaat en is niet leegDe map bestaat niet/bestaat maar is leeg/bestaat en is niet leegDe inhoud van de Chinese container map wordt overschreven (de originele inhoud wordt geleegd en de inhoud van de map op de host wordt overschreven)

Bestandsmontage

Het grootste verschil tussen bestandsmontage en mapmontage is:

  • Docker verbiedt het mounten van bestanden die niet op de host bestaan aan bestanden die al in de container bestaan
  • Bestandsmounting heeft geen effect op andere bestanden onder dezelfde map

Daarnaast is het overschrijfgedrag consistent met het mounten van mappen, d.w.z.:

  • Overschrijf de inhoud van het bestand in de container met de inhoud van het bestand op de host


De details zijn als volgt:

gastheer

gastheer
container
Mount resultaat
Bestanden die niet bestaan configA.jsDocumenten die al bestaan congfigB.jsFout, probeer je een map op een bestand te mounten (of andersom)? Controleer of het opgegeven hostpad bestaat en het verwachte type is. Het genereert twee lege mappen configA.js en configB.js tegelijk op de host, maar de container kan niet starten

gastheer

gastheer
container
Mount resultaat
Huidig dossier configA.jsHuidig dossier congfigB.jsContainer Chinese items configB.js hetzelfde blijven, maar de inhoud van het bestand wordt overschreven door de congfigA.js inhoud
Huidig dossier configA.jsBestanden die niet bestaan congfigB.jsEen nieuw bestand configB.js in de container met de inhoud van het configA.js bestand blijft ongewijzigd configB.js alle andere bestanden onder het bestand

samenvatting

Het bestand op de host zal altijd de container Chinese map overschrijven

gastheer
container
Mount resultaat
Bestanden die niet bestaanDocumenten die al bestaanVerboden handelingen
Bestaande documentenBestanden die niet bestaan / bestanden die al bestaanToevoegen/overschrijven (maakt een map aan als die niet bestaat)

conclusie

Vouwhouder

  • Als je niet-bestaande of lege mappen in de container laat monteren, worden de bijbehorende mappen in de container geleegd
  • Het toevoegen van een niet-lege map aan een container overschrijft de oorspronkelijke map in de container

Bestandsmontage

  • Het is verboden om niet-bestaande bestanden te mounten op bestanden die al in de container bestaan
  • Bestaande bestanden worden overschreven wanneer ze aan de container worden gekoppeld, en als de bestanden niet bestaan, worden ze aangemaakt

Toepassingsscenario's

  • Uit bovenstaande analyse blijkt dat mapmounting wordt gebruikt om bestanden in de hele map te overschrijven, dus het kan worden gebruikt wanneer een groot aantal bestanden in de container moet worden gemount; bovendien, als een lege map of een niet-bestaande map wordt gemount, wordt het meestal omgekeerd gebruikt: dat wil zeggen, nadat de container is gestart, kunnen sommige bestanden (zoals logs) worden gegenereerd onder de map van het mountingpunt in de container, en op dat moment is het direct zichtbaar in de map op de overeenkomstige host.
  • Bestandsmounting wordt vaak gebruikt om configuratiebestanden te mounten om de standaardconfiguratie dynamisch te wijzigen tijdens runtime, omdat het slechts één bestand overschrijft zonder andere bestanden in dezelfde map in de container te beïnvloeden.

Overgedragen van:De hyperlink-login is zichtbaar.

(Einde)




Vorig:Elasticsearch gebruikt elasticdump om data te back-uppen en te migreren
Volgend:Docker POI-foutuitzonderingoplossing
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com