Dela via


Beständig lagring i containrar

Du kan ha fall där det är viktigt att en app kan spara data i en container, eller om du vill visa filer i en container som inte ingick i containerversionen. Beständig lagring kan tillhandahållas för containrar på ett par sätt:

  • Bindmonteringar
  • Namngivna volymer

Docker har en bra översikt över hur du använder volymer så det är bäst att läsa det först. Resten av den här sidan fokuserar på skillnader mellan Linux och Windows och innehåller exempel på Windows.

Bind monteringar

Med bind-mounts kan en container dela en katalog med värddatorn. Det här är användbart om du vill att en plats ska lagra filer på den lokala datorn som är tillgängliga om du startar om en container eller vill dela den med flera containrar. Om du vill att containern ska köras på flera datorer med åtkomst till samma filer ska en namngiven volym eller SMB-montering användas i stället.

Anmärkning

Bindningsmontering direkt på klusterdelade volymer (CSV) stöds inte; virtuella datorer som agerar som containervärd kan köras på en CSV-volym.

Behörigheter

Den behörighetsmodell som används för bindningsmonteringar varierar beroende på isoleringsnivån för din container.

Containrar som använder Hyper-V isolering använder en enkel skrivskyddad eller skrivbar behörighetsmodell. Filer nås på värddatorn via LocalSystem-kontot. Om du får åtkomst nekad i containern, kontrollera att LocalSystem har åtkomst till den katalogen på värden. När skrivskyddsflaggan används, kommer ändringar som görs i volymen i containern inte att synas eller sparas i värddatorns katalog.

Windows-containrar som använder processisolering skiljer sig något eftersom de använder processidentiteten i containern för att komma åt data, vilket innebär att fil-ACL:er respekteras. Identiteten för den process som körs i containern ("ContainerAdministrator" på Windows Server Core och "ContainerUser" på Nano Server-containrar används som standard för åtkomst till filer och kataloger i den monterade volymen i stället för LocalSystem, och måste beviljas åtkomst för att använda data.

Eftersom dessa identiteter bara finns inom containerns kontext – inte på värden där filerna lagras – bör du använda en allmänt känd säkerhetsgrupp, till exempel Authenticated Users när du konfigurerar ACL:er för att bevilja åtkomst till containrarna.

Varning

Bind inte känsliga kataloger som C:\ till en obetrodd container. Detta skulle göra det möjligt för den att ändra filer på värden som den normalt inte skulle ha åtkomst till och skulle kunna skapa en säkerhetsrisk.

Exempel på användning:

  • docker run -v c:\ContainerData:c:\data:RO för skrivskyddad åtkomst
  • docker run -v c:\ContainerData:c:\data:RW för läs- och skrivåtkomst
  • docker run -v c:\ContainerData:c:\data för läs- och skrivåtkomst (standard)

Symlänkar hanteras i kontainern. Om du binder en värdsökväg till en container som är en symlink eller innehåller symlinks kommer containern inte att kunna komma åt dem.

SMB-monteringar

I Windows Server version 1709 och senare gör funktionen "SMB Global Mapping" det möjligt att montera en SMB-resurs på värden och sedan skicka kataloger på resursen till en container. Containern behöver inte konfigureras med en specifik server, resurs, användarnamn eller lösenord – allt hanteras på värden i stället. Containern fungerar på samma sätt som om den hade lokal lagring.

Konfigurationssteg

  1. På containervärden mappar du globalt den fjärranslutna SMB-resursen:

    $creds = Get-Credential
    New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:
    

    Det här kommandot använder autentiseringsuppgifterna för att autentisera med fjärr-SMB-servern. Mappa sedan fjärrresurssökvägen till G: enhetsbeteckning (kan vara valfri annan tillgänglig enhetsbeteckning). Containers skapade på denna containerhosten kan nu ha sina datavolymer mappade till en sökväg på G:-driven.

    Anmärkning

    När du använder global SMB-mappning för containrar kan alla användare på containervärden komma åt fjärrresursen. Alla program som körs på containervärden har också åtkomst till den mappade fjärrresursen.

  2. Skapa containrar med datavolymer som mappats till globalt monterade SMB-resursdockerkörningar -it --name demo -v g:\ContainerData:c:\AppData1 mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe

    I containern mappas c:\AppData1 sedan till fjärrresursens "ContainerData"-katalog. Alla data som lagras på globalt mappade fjärrresurser kommer att vara tillgängliga för program i containern. Flera containrar kan få läs- och skrivåtkomst till dessa delade data med samma kommando.

Det här globala SMB-mappningsstödet är en SMB-funktion på klientsidan som kan fungera ovanpå alla kompatibla SMB-servrar, inklusive:

  • Scale-out-filserver ovanpå Storage Spaces Direct (S2D) eller ett traditionellt SAN
  • Azure Files (SMB-delning)
  • Traditionell filserver
  • Tredjepartsimplementering av SMB-protokoll (till ex: NAS-apparater)

Anmärkning

Global SMB-mappning stöder inte DFS-namnrymdsmappar (DFSN). Om du till exempel mappar en DFSN-rotresurs med New-SmbGlobalMapping -LocalPath Z: -RemotePath \\contoso.com\share1'returnerar läsningen av rotens mappmål felet "Nätverksplatsen kan inte nås".

Namngivna volymer

Med namngivna volymer kan du skapa en volym efter namn, tilldela den till en container och återanvända den senare med samma namn. Du behöver inte hålla reda på den faktiska sökvägen till var den skapades, bara namnet. Docker-motorn i Windows har ett inbyggt namngivet volym-plugin-program som kan skapa volymer på den lokala datorn. Ytterligare ett plugin-program krävs om du vill använda namngivna volymer på flera datorer.

Exempelsteg:

  1. docker volume create unwound – Skapa en volym med namnet "unwound"
  2. docker run -v unwound:c:\data microsoft/windowsservercore – Starta en container med volymen mappad till c:\data
  3. Skriv vissa filer till c:\data i containern och stoppa sedan containern
  4. docker run -v unwound:c:\data microsoft/windowsservercore – Starta en ny container
  5. Kör dir c:\data i den nya containern – filerna finns kvar

Anmärkning

Windows Server konverterar målsökvägsnamn (sökvägen i containern) till gemener; d.v.s. -v unwound:c:\MyData, eller -v unwound:/app/MyData i Linux-containrar, resulterar i en katalog i containern, c:\mydata, eller /app/mydata i Linux-containrar, som mappas (och skapas om den inte finns).