Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Möglicherweise gibt es Fälle, in denen es wichtig ist, dass eine Anwendung in der Lage ist, Daten permanent in einem Container zu speichern, oder Sie möchten Dateien in einem Container anzeigen, die bei der Erstellung des Containers nicht enthalten waren. Persistenter Speicher kann Containern auf verschiedene Arten zugewiesen werden:
- Mounts einbinden
- Benannte Volumes
Docker hat eine großartige Übersicht über die Verwendung von Volumes , damit es am besten ist, das zuerst zu lesen. Der Rest dieser Seite konzentriert sich auf Unterschiede zwischen Linux und Windows und enthält Beispiele für Windows.
Bindungsbereitstellungen
Binden Sie Bereitstellungen , damit ein Container ein Verzeichnis für den Host freigeben kann. Dies ist nützlich, wenn Sie dateien auf dem lokalen Computer speichern möchten, die verfügbar sind, wenn Sie einen Container neu starten oder für mehrere Container freigeben möchten. Wenn der Container auf mehreren Computern mit Zugriff auf dieselben Dateien ausgeführt werden soll, sollte stattdessen ein benanntes Volume oder eine SMB-Mount verwendet werden.
Hinweis
Das Binden der Bereitstellung direkt auf freigegebenen Clustervolumes (CSV) wird nicht unterstützt, virtuelle Computer, die als Containerhost fungieren, können auf einem CSV-Volume ausgeführt werden.
Erlaubnisse
Das berechtigungsmodell, das zum Binden von Bereitstellungen verwendet wird, variiert je nach Isolationsstufe für Ihren Container.
Container, dieHyper-V Isolation verwenden, verwenden ein einfaches schreibgeschütztes oder schreibgeschütztes Berechtigungsmodell. Auf Dateien wird über das LocalSystem
Konto auf dem Host zugegriffen. Wenn Der Zugriff im Container verweigert wird, stellen Sie sicher, dass LocalSystem
der Zugriff auf dieses Verzeichnis auf dem Host vorhanden ist. Wenn das schreibgeschützte Flag verwendet wird, werden änderungen, die am Volume innerhalb des Containers vorgenommen wurden, nicht sichtbar oder im Verzeichnis auf dem Host gespeichert.
Windows-Container mit Prozessisolation unterscheiden sich geringfügig, da sie die Prozessidentität innerhalb des Containers verwenden, um auf Daten zuzugreifen, was bedeutet, dass Datei-ACLs berücksichtigt werden. Die Identität des prozesses, der im Container ausgeführt wird ("ContainerAdministrator" unter Windows Server Core und "ContainerUser" auf Nano Server-Containern, standardmäßig), wird verwendet, um auf die Dateien und Verzeichnisse im bereitgestellten Volume anstatt LocalSystem
auf das bereitgestellte Volume zuzugreifen, und muss Zugriff auf die Verwendung der Daten gewährt werden.
Da diese Identitäten nur im Kontext des Containers vorhanden sind - nicht auf dem Host, auf dem die Dateien gespeichert sind - sollten Sie eine bekannte Sicherheitsgruppe verwenden, z Authenticated Users
. B. beim Konfigurieren der ACLs, um Zugriff auf die Container zu gewähren.
Warnung
Binden Sie keine vertraulichen Verzeichnisse wie z C:\
. B. in einen nicht vertrauenswürdigen Container. Dies würde es ermöglichen, Dateien auf dem Host zu ändern, auf die sie normalerweise keinen Zugriff haben und eine Sicherheitsverletzung erstellen könnte.
Beispielverwendung:
-
docker run -v c:\ContainerData:c:\data:RO
für schreibgeschützten Zugriff -
docker run -v c:\ContainerData:c:\data:RW
für Lese-/Schreibzugriff -
docker run -v c:\ContainerData:c:\data
für Lese-/Schreibzugriff (Standard)
Symlinks
Symlinks werden im Container aufgelöst. Wenn Sie einen Hostpfad an einen Container binden, der ein Symlink ist oder Symlinks enthält, kann der Container nicht darauf zugreifen.
SMB-Bereitstellungen
Unter Windows Server, Version 1709 und höher, ermöglicht das Feature "SMB Global Mapping" das Bereitstellen einer SMB-Freigabe auf dem Host und das Übergeben von Verzeichnissen für diese Freigabe in einen Container. Der Container muss nicht mit einem bestimmten Server, einer bestimmten Freigabe, einem Benutzernamen oder einem Kennwort konfiguriert werden– das wird stattdessen auf dem Host behandelt. Der Container funktioniert genauso wie bei lokalem Speicher.
Konfigurationsschritte
Ordnen Sie auf dem Containerhost die Remote-SMB-Freigabe global zu:
$creds = Get-Credential New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:
Dieser Befehl verwendet die Anmeldeinformationen, um sich beim Remote-SMB-Server zu authentifizieren. Ordnen Sie anschließend den Pfad für die Remotefreigabe auf G: Laufwerkbuchstabe zu (dies kann jeder verfügbare Laufwerkbuchstabe sein). Auf diesem Containerhost erstellte Container können nun ihre Datenvolumes einem Pfad auf dem Laufwerk G: zugeordnet sein.
Hinweis
Wenn die globale Zuordnung in SMB für Container verwendet wird, können alle Benutzer auf dem Containerhost auf die Remotefreigabe zugreifen. Jede Anwendung, die auf dem Containerhost ausgeführt wird, hat auch Zugriff auf die zugeordnete Remotefreigabe.
Erstellen von Containern mit Datenvolumes, die global bereitgestellten SMB-Freigabe-Docker zugeordnet sind, führen Sie -it Demo -v g:\ContainerData:c:\AppData1 mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe
Innerhalb des Containers wird c:\AppData1 dann dem Verzeichnis "ContainerData" der Remotefreigabe zugeordnet. Alle auf der global zugeordneten Remotefreigabe gespeicherten Daten sind für Anwendungen innerhalb des Containers verfügbar. Mehrere Container können Lese-/Schreibzugriff auf diese freigegebenen Daten mit demselben Befehl erhalten.
Diese globale SMB-Zuordnungsunterstützung ist SMB-clientseitiges Feature, das auf jedem kompatiblen SMB-Server funktionieren kann, einschließlich:
- Scaleout File Server über Direkte Speicherplätze (S2D) oder ein herkömmliches SAN
- Azure Files (SMB-Freigabe)
- Herkömmlicher Dateiserver
- Implementierung des SMB-Protokolls von Drittanbietern (z. B. NAS-Appliances)
Hinweis
Die globale SMB-Zuordnung unterstützt keine DFS-Namespaces (DFSN)-Ordner. Wenn Sie beispielsweise eine DFSN-Stammfreigabe New-SmbGlobalMapping -LocalPath Z: -RemotePath \\contoso.com\share1'
zuordnen, gibt das Lesen der Ordnerziele dieses Stamms den Fehler "Der Netzwerkspeicherort kann nicht erreicht werden" zurück.
Benannte Volumes
Mit benannten Volumes können Sie ein Volume mit einem Namen erstellen, es einem Container zuweisen und später mit demselben Namen wiederverwenden. Sie müssen nicht den tatsächlichen Pfad nachverfolgen, an dem er erstellt wurde, nur den Namen. Das Docker-Modul unter Windows verfügt über ein integriertes benanntes Volume-Plug-In, das Volumes auf dem lokalen Computer erstellen kann. Ein zusätzliches Plug-In ist erforderlich, wenn Sie benannte Volumes auf mehreren Computern verwenden möchten.
Beispielschritte:
-
docker volume create unwound
- Erstellen eines Volumes mit dem Namen "Entwunden" -
docker run -v unwound:c:\data microsoft/windowsservercore
- Starten eines Containers mit dem Volume, das c:\data zugeordnet ist - Schreiben Sie einige Dateien in "c:\data" im Container, und beenden Sie den Container.
-
docker run -v unwound:c:\data microsoft/windowsservercore
- Starten eines neuen Containers - Im neuen Container ausführen
dir c:\data
– die Dateien sind noch vorhanden
Hinweis
Windows Server konvertiert Zielpfadnamen (den Pfad innerhalb des Containers) in Kleinbuchstaben. d. h. -v unwound:c:\MyData
in -v unwound:/app/MyData
Linux-Containern führt dazu, dass ein Verzeichnis innerhalb des Containers von c:\mydata
oder /app/mydata
in Linux-Containern zugeordnet wird (und erstellt wird, sofern nicht vorhanden).