Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode ter casos em que é importante que um aplicativo seja capaz de persistir dados em um contêiner ou que você queira mostrar arquivos em um contêiner que não foram incluídos no tempo de build do contêiner. O armazenamento persistente pode ser fornecido a contêineres de algumas maneiras:
- Associar montagens
- Volumes nomeados
O Docker tem uma ótima visão geral de como usar volumes , portanto, é melhor ler isso primeiro. O restante desta página se concentra nas diferenças entre Linux &Windows e fornece exemplos no Windows.
Associar Montagens
As montagens vinculadas permitem que um contêiner compartilhe um diretório com o host. Isso é útil se você quiser um local para armazenar arquivos no computador local que estão disponíveis se você reiniciar um contêiner ou quiser compartilhá-lo com vários contêineres. Se você quiser que o contêiner seja executado em vários computadores com acesso aos mesmos arquivos, então deverá ser usado um volume nomeado ou uma montagem SMB.
Observação
Não há suporte para a montagem de vinculação diretamente em volumes compartilhados clusterizados (CSV), as máquinas virtuais que atuam como um host de contêiner podem ser executadas em um volume CSV.
Permissões
O modelo de permissão usado para montagens por associação varia de acordo com o nível de isolamento do seu contêiner.
Contêineres que utilizam isolamentoHyper-V empregam um modelo simples de permissão somente de leitura ou de leitura e gravação. Os arquivos são acessados no host usando a LocalSystem conta. Se você tiver acesso negado no contêiner, verifique se LocalSystem tem acesso a esse diretório no host. Quando o sinalizador de somente leitura for usado, as alterações feitas no volume dentro do contêiner não serão visíveis nem persistentes no diretório no host.
Os contêineres do Windows que usam o isolamento do processo são ligeiramente diferentes porque usam a identidade do processo dentro do contêiner para acessar dados, o que significa que as ACLs de arquivo são respeitadas. A identidade do processo em execução no contêiner ("ContainerAdministrator" no Windows Server Core e "ContainerUser" em contêineres do Nano Server, por padrão) será usada para acessar os arquivos e diretórios no volume montado em vez de LocalSystem, e precisará ter acesso para usar os dados.
Como essas identidades só existem no contexto do contêiner, não no host em que os arquivos estão armazenados, você deve usar um grupo de segurança conhecido, como Authenticated Users ao configurar as ACLs para conceder acesso aos contêineres.
Aviso
Não faça a montagem por associação de diretórios confidenciais, como o C:\, em um contêiner não confiável. Isso permitiria que ele alterasse arquivos no host aos quais normalmente não teria acesso e poderia criar uma violação de segurança.
Exemplo de uso:
-
docker run -v c:\ContainerData:c:\data:ROpara acesso somente leitura -
docker run -v c:\ContainerData:c:\data:RWpara acesso de leitura/gravação -
docker run -v c:\ContainerData:c:\datapara acesso de leitura e gravação (padrão)
Links simbólicos
Os links simbólicos (symlinks) são resolvidos no contêiner. Se você fizer a montagem por associação de um caminho de host em um contêiner que é um link simbólico, ou contém links simbólicos, o contêiner não conseguirá acessá-los.
Montagens SMB
No Windows Server versão 1709 e posterior, o recurso chamado "Mapeamento Global de SMB" possibilita montar um compartilhamento SMB no host e, em seguida, passar diretórios sobre esse compartilhamento para um contêiner. O contêiner não precisa ser configurado com um servidor específico, um compartilhamento, um nome de usuário ou uma senha – tudo isso é gerenciado diretamente no host. O contêiner funcionará da mesma forma que se tivesse armazenamento local.
Etapas de configuração
No host do contêiner, mapeie globalmente o compartilhamento SMB remoto:
$creds = Get-Credential New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:Esse comando usará as credenciais para autenticar com o servidor SMB remoto. Em seguida, mapeie o caminho do compartilhamento remoto para a letra de unidade G: (pode ser qualquer outra letra de unidade disponível). Os contêineres criados nesse host de contêiner agora podem ter seus volumes de dados mapeados para um caminho na unidade G:.
Observação
Ao usar o mapeamento global de SMB para contêineres, todos os usuários no host de contêiner podem acessar o compartilhamento remoto. Qualquer aplicativo em execução no host de contêiner também terá acesso ao compartilhamento remoto mapeado.
Crie contêineres com volumes de dados mapeados para o compartilhamento SMB montado globalmente docker run -it --name demo -v g:\ContainerData:c:\AppData1 mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe
Dentro do contêiner, c:\AppData1 será mapeado para o diretório "ContainerData" do compartilhamento remoto. Todos os dados armazenados no compartilhamento remoto mapeado globalmente estarão disponíveis para aplicativos dentro do contêiner. Vários contêineres podem obter acesso de leitura/gravação a esses dados compartilhados com o mesmo comando.
Esse suporte de mapeamento global SMB é um recurso do lado do cliente SMB que pode funcionar em cima de qualquer servidor SMB compatível, incluindo:
- Servidor de arquivos de expansão sobre S2D (Espaços de Armazenamento Diretos) ou uma SAN tradicional
- Arquivos do Azure (compartilhamento SMB)
- Servidor de Arquivos Tradicional
- Implementação de terceiros do protocolo SMB (por exemplo: dispositivos NAS)
Observação
O mapeamento global do SMB não dá suporte a pastas DFSN (Namespaces DFS). Por exemplo, se você mapear um compartilhamento raiz DFSN com New-SmbGlobalMapping -LocalPath Z: -RemotePath \\contoso.com\share1', a leitura dos destinos de pasta dessa raiz retornará o erro "O local da rede não pode ser acessado".
Volumes Nomeados
Os volumes nomeados permitem que você crie um volume por nome, atribua-o a um contêiner e reutilize-o posteriormente pelo mesmo nome. Não é necessário rastrear o caminho real de onde ele foi criado, apenas o nome. O mecanismo do Docker no Windows tem um plug-in de volume nomeado interno que pode criar volumes no computador local. Um plug-in adicional será necessário se você quiser usar volumes nomeados em vários computadores.
Etapas de exemplo:
-
docker volume create unwound- Crie um volume chamado “unwound” -
docker run -v unwound:c:\data microsoft/windowsservercore– Iniciar um contêiner com o volume mapeado para c:\data - Escreva alguns arquivos em c:\data no contêiner e, em seguida, interrompa o contêiner
-
docker run -v unwound:c:\data microsoft/windowsservercore– Iniciar um novo contêiner - Executar
dir c:\datano novo contêiner – os arquivos ainda estão lá
Observação
O Windows Server converterá nomes de caminho de destino (o caminho dentro do contêiner) em minúsculas; ou seja, -v unwound:c:\MyData, ou -v unwound:/app/MyData em contêineres do Linux, resultará em um diretório dentro do contêiner de c:\mydata, ou /app/mydata em contêineres do Linux, sendo mapeado (e criado, se não existir).