Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В некоторых случаях важно, чтобы приложение могло сохранять данные в контейнере или чтобы в контейнер можно было добавить файлы, которые не были включены во время его сборки. Постоянное хранилище можно предоставить контейнерам несколькими способами:
- Привязка точек монтирования
- Именованные тома
Docker предоставляет отличный обзор использования томов поэтому лучше сначала его прочитать. Остальная часть этой страницы посвящена различиям между Linux и Windows и предоставляет примеры в Windows.
Привязка точек монтирования
Привязка подключений позволяет контейнеру совместно использовать каталог с узлом. Это полезно, если требуется место для хранения файлов на локальном компьютере, доступном при перезапуске контейнера или его совместном использовании с несколькими контейнерами. Если вы хотите, чтобы контейнер выполнялся на нескольких компьютерах с доступом к тем же файлам, вместо этого следует использовать именованный том или подключение SMB.
Замечание
Монтирование с привязкой непосредственно на общие тома кластера (CSV) не поддерживается. Однако виртуальные машины, работающие как хост контейнера, могут выполняться на томе CSV.
Разрешения
Модель разрешений, используемая для привязываемых подключений, зависит от уровня изоляции контейнера.
Контейнеры, использующие Hyper-V изоляции , используют простую модель разрешений только для чтения или записи. Доступ к файлам на хосте осуществляется с помощью учетной записи LocalSystem
. Если в контейнере запрещен доступ, убедитесь, что LocalSystem
имеет доступ к этому каталогу на узле. Если используется флаг только для чтения, изменения, внесенные в томе внутри контейнера, не будут отображаться или сохраняться в каталоге на хосте.
Контейнеры Windows, использующие изоляцию процессов , немного отличаются, так как они используют удостоверение процесса в контейнере для доступа к данным, что означает, что списки управления доступом к файлам учитываются. Личность процесса, выполняемого в контейнере (по умолчанию "ContainerAdministrator" на Windows Server Core и "ContainerUser" на контейнерах Nano Server), будет использоваться для доступа к файлам и каталогам в подключенном томе вместо LocalSystem
и ей необходимо будет предоставить доступ для использования данных.
Поскольку эти идентификаторы существуют только в контексте контейнера, а не на хосте, где хранятся файлы, следует использовать известную группу безопасности, такую как Authenticated Users
, при настройке списков управления доступом для предоставления доступа к контейнерам.
Предупреждение
Не выполняйте привязку конфиденциальных каталогов, например C:\
в ненадежный контейнер. Это позволит ему изменить файлы на узле, к которому он обычно не имеет доступа и может создать нарушение безопасности.
Пример использования:
-
docker run -v c:\ContainerData:c:\data:RO
доступ только для чтения -
docker run -v c:\ContainerData:c:\data:RW
для доступа на чтение и запись -
docker run -v c:\ContainerData:c:\data
для доступа на чтение и запись (по умолчанию)
Симлинки
Символьные ссылки разрешаются в контейнере. Если вы подключаете внешний путь на хосте к контейнеру, который является символической ссылкой или содержит символические ссылки, контейнер не сможет к ним получить доступ.
Подключения SMB
В Windows Server версии 1709 и более поздних версиях функция "Глобальное сопоставление SMB" позволяет подключить SMB-общий ресурс на хосте, а затем передать каталоги этого ресурса в контейнер. Контейнеру не нужно настраивать определенный сервер, общий доступ, имя пользователя или пароль. Это все обрабатывается на узле. Контейнер будет работать так же, как если бы он имел локальное хранилище.
Действия по настройке
На хосте контейнера глобально назначьте удаленный SMB общий доступ:
$creds = Get-Credential New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:
Эта команда будет использовать учетные данные для проверки подлинности с помощью удаленного сервера SMB. Затем сопоставите путь удаленной общей папки с буквой диска G (может быть любой другой доступной буквой диска). Контейнеры, созданные на этом узле контейнера, теперь могут сопоставить тома данных с путем на диске G: .
Замечание
При использовании глобального сопоставления SMB для контейнеров все пользователи на контейнерном узле могут получить доступ к удалённому общему ресурсу. Любое приложение, работающее на узле контейнера, также будет иметь доступ к сопоставленной удаленной общей папке.
Создайте контейнеры с томами данных, сопоставленными с глобально подключенной общей папкой SMB docker run -it --name demo -v g:\ContainerData:c:\AppData1 mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe
В контейнере c:\AppData1 затем будет сопоставлен с каталогом "ContainerData" удаленной общей папки. Все данные, хранящиеся в глобально сопоставленном удаленном ресурсе, будут доступны приложениям внутри контейнера. Несколько контейнеров могут получить доступ на чтение и запись к этим общим данным с одной и той же командой.
Эта поддержка глобального сопоставления SMB — это клиентская функция SMB, которая может работать на любом совместимом сервере SMB, включая:
- Масштабируемый файловый сервер на основе локальных дисковых пространств (S2D) или традиционного SAN
- Файлы Azure (общий доступ SMB)
- Традиционный файловый сервер
- Реализация протокола SMB третьей стороной (например, устройства NAS)
Замечание
Глобальное сопоставление SMB не поддерживает папки DFS Namespaces (DFSN). Например, при сопоставлении корневой папки New-SmbGlobalMapping -LocalPath Z: -RemotePath \\contoso.com\share1'
DFSN с целевыми объектами папок этого корневого каталога возвращается сообщение "Сетевое расположение невозможно достичь".
Именованные тома
Именованные тома позволяют создать том с конкретным именем, назначить его контейнеру и использовать его повторно позже с тем же именем. Вам не нужно отслеживать путь создания, достаточно знать имя. Подсистема Docker в Windows имеет встроенный модуль именованных томов, который может создавать тома на локальном компьютере. Для использования именованных томов на нескольких компьютерах требуется дополнительный плагин.
Примеры шагов:
-
docker volume create unwound
— Создайте том с именем 'unwound' -
docker run -v unwound:c:\data microsoft/windowsservercore
— запуск контейнера с томом, сопоставленным с C:\data - Запишите несколько файлов в C:\data в контейнере, затем остановите контейнер.
-
docker run -v unwound:c:\data microsoft/windowsservercore
— запуск нового контейнера - Запуск
dir c:\data
в новом контейнере — файлы по-прежнему существуют
Замечание
Windows Server преобразует целевые имена путей (путь внутри контейнера) в нижний регистр; т. е. -v unwound:c:\MyData
или -v unwound:/app/MyData
в контейнерах Linux приведет к тому, что каталог в контейнере будет сопоставлен с c:\mydata
или /app/mydata
в контейнерах Linux (и создан, если он отсутствует).