Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 9379|Antwort: 0

Die Datei oder der Ordner existiert nicht, wenn das Docker-Volume gemountet wird

[Link kopieren]
Veröffentlicht am 08.11.2021 09:20:35 | | |
Hintergrund

Docker Volume erlaubt es uns, einige Dateien (wie Konfigurationsdateien) dynamisch zu mounten, um die Originaldateien im Image beim Start eines Docker-Containers zu überschreiben, aber was passiert, wenn wir einen Ordner oder eine Datei, die noch nicht auf dem Host existiert, auf den Container mounten? LZ stieß in seiner Arbeit auf ein solches Problem, übte es daher selbst und dokumentierte die experimentellen Ergebnisse wie folgt:

Falterhalterung

Das Verhalten von Docker bei der Ordnerbefestigung ist einheitlich, wie folgt:

  • Wenn der Ordner nicht existiert, wird er zuerst erstellt (oder rekursiv, wenn es sich um einen mehrstufigen Ordner handelt)
  • Überschreiben Sie den Ordnerinhalt im Container mit dem Ordnerinhalt auf dem Host


Die Details sind wie folgt:

Der Ordner auf dem Host existiert und ist nicht leer

Gastgeber
Container
Mount-Ergebnis
Nicht-leerer Ordner A existiertOrdner B, der nicht existiertErstelle zuerst Ordner B in Contanier und kopiere dann alle Dateien aus Ordner A in B
Nicht-leerer Ordner A existiertNicht-leerer Ordner B existiertZuerst leert man den Originalinhalt des chinesischen Containerordners B und kopiert dann die chinesische Kopie A nach B

Unabhängig davon, ob Ordner B im Container existiert, überschreibt A den Inhalt von B vollständig

Der Ordner auf dem Host existiert, ist aber leer

Gastgeber
Container
Mount-Ergebnis
Leerer Ordner A, der existiertNicht-leerer Ordner B existiertDer Inhalt des chinesischen Containerordners B wird entleert

Der Inhalt des entsprechenden Ordners im Container wird entleert

Der Host-Ordner existiert nicht

Gastgeber
Container
Mount-Ergebnis
Ordner A, der nicht existiertNicht-leerer Ordner B existiertErstelle von Ordner A auf dem Host, und der Inhalt des chinesischen Containerordners B wird geleert
Ordner A/B/C, die nicht existierenNicht-leerer Ordner B existiertErstelle die Ordner A/B/C auf dem Host, und der Inhalt des chinesischen Container-Ordners B wird geleert

Der Inhalt des entsprechenden Ordners im Container wird entleert

Zusammenfassung

Der Host-Ordner überschreibt definitiv den chinesischen Container-Ordner:

Gastgeber
Container
Mount-Ergebnis
Ordner existiert nicht/Ordner existiert, aber ist leerDer Ordner existiert/existiert nicht, ist aber leer/existiert und ist nicht leerDer chinesische Behälter wird abgedeckt (entleert)
Der Ordner existiert und ist nicht leerDer Ordner existiert/existiert nicht, ist aber leer/existiert und ist nicht leerDie Inhalte des chinesischen Containers werden überschrieben (der Originalinhalt wird geleert, und der Inhalt des Ordners auf dem Host wird überschrieben)

Datei-Mounting

Der größte Unterschied zwischen Datei-Mounting und Ordner-Mounting ist:

  • Docker verbietet das Mounten von Dateien, die nicht auf dem Host existieren, auf bereits im Container vorhandene Dateien
  • Datei-Mounting hat keinen Einfluss auf andere Dateien im selben Ordner

Zusätzlich ist das Überschreibverhalten mit dem Ordnermounting konsistent, d.h.:

  • Überschreiben Sie den Inhalt der Datei im Container mit dem Inhalt der Datei auf dem Host


Die Details sind wie folgt:

Gastgeber

Gastgeber
Container
Mount-Ergebnis
Dateien, die nicht existieren configA.jsDokumente, die bereits existieren congfigB.jsFehler: Versuchst du, ein Verzeichnis auf eine Datei einzubinden (oder umgekehrt)? Überprüfen Sie, ob der angegebene Hostpfad existiert und der erwartete Typ ist. Er erzeugt zwei leere Verzeichnisse configA.js und configB.js gleichzeitig auf dem Host, aber der Container kann nicht starten

Gastgeber

Gastgeber
Container
Mount-Ergebnis
Aktuelle Akte configA.jsAktuelle Akte congfigB.jsContainer-Chinesisches Element configB.js gleich bleiben, aber der Dateiinhalt wird von den congfigA.js Inhalten überschrieben
Aktuelle Akte configA.jsDateien, die nicht existieren congfigB.jsEine neue Datei configB.js im Container mit dem Inhalt der configA.js Datei bleibt unverändert configB.js allen anderen Dateien unter der Datei

Zusammenfassung

Die Datei auf dem Host überschreibt immer den chinesischen Ordner des Containers

Gastgeber
Container
Mount-Ergebnis
Dateien, die nicht existierenDokumente, die bereits existierenVerbotene Handlungen
Existierende DokumenteDateien, die nicht existieren / Dateien, die bereits existierenHinzufügen/überschreiben (erstellt ein Verzeichnis, falls es nicht existiert)

Schlussfolgerung

Falterhalterung

  • Wenn du zulässt, dass nicht vorhandene oder leere Ordner im Container montiert werden, werden die entsprechenden Ordner im Container leer.
  • Das Anfügen eines nicht leeren Ordners an einen Container überschreibt den ursprünglichen Ordner im Container

Datei-Mounting

  • Es ist verboten, nicht existierende Dateien auf Dateien zu mounten, die bereits im Container existieren
  • Bestehende Dateien werden überschrieben, wenn sie an den Container angehängt werden, und wenn die Dateien nicht existieren, werden sie erstellt

Anwendungsszenarien

  • Aus der obigen Analyse lässt sich erkennen, dass Ordner-Mounting verwendet wird, um Dateien im gesamten Ordner zu überschreiben, sodass es eingesetzt werden kann, wenn eine große Anzahl von Dateien in den Container gemountet werden muss; außerdem, wenn ein leerer Ordner oder ein nicht vorhandener Ordner gemountet wird, wird es in der Regel umgekehrt verwendet: Das heißt, nach dem Start des Containers können einige Dateien (wie Logs) unter dem Ordner des Mounting-Punkts im Container generiert werden, sodass es zu diesem Zeitpunkt direkt im Ordner des entsprechenden Hosts sichtbar ist.
  • Dateimounting wird häufig verwendet, um Konfigurationsdateien zu mounten, die die Standardkonfiguration zur Laufzeit dynamisch ändern, da nur eine einzelne Datei überschrieben wird, ohne andere Dateien im selben Ordner im Container zu beeinflussen.

Übertragen von:Der Hyperlink-Login ist sichtbar.

(Ende)




Vorhergehend:Elasticsearch verwendet Elasticdump, um Daten zu sichern und zu migrieren
Nächster:Docker POI-Fehler-Ausnahmelösung
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com