Desde que o lançamento do 0.9 Docker caiu LXC
e usa seu próprio ambiente de execução, libcontainer
. Sua pergunta é um pouco antiga, mas acho que minha resposta ainda se aplica à versão que você está usando.
Resposta rápida: Para entender as permissões de volumes, você pode fazer a analogia de mount --bind Host-Dir Container-Dir
. Então, para cumprir sua exigência, você pode usar qualquer método tradicional para gerenciar permissões. Eu acho que o ACL é o que você precisa .
Longa resposta: Assim como no seu exemplo, temos um contêiner chamado dock com um volume /data
.
docker run -tid --name dock -v /usr/container/Databases/:/data \
centos:latest /bin/bash
Dentro do container nosso servidor MySQL foi configurado para usar o /data
como seu diretório de dados. Portanto, temos nossos bancos de dados no /data
dentro do contêiner. E fora do contêiner no sistema operacional host, montamos esse /data
volume de /usr/container/Databases/
e atribuímos um usuário normal bob para fazer backups dos bancos de dados. A partir da máquina host, configuraremos as ACLs para o usuário bob .
useradd -u 3000 bob
usermod -R o=--- /usr/container/Databases/
setfacl -R -m u:bob:rwx /usr/container/Databases/
setfacl -R -d -m u:bob:rwx /usr/container/Databases/
Para testar, vamos fazer um backup com o usuário bob .
su - bob
tar -cvf container-data.tar /usr/container/Databases/
E o tar será listado e você poderá ver que nosso usuário conseguiu acessar todos os arquivos.
Agora, de dentro do container, se você verificar com getfacl
, você notará que em vez de bob ele mostra 3000. Isso ocorre porque o UID de bob é 3000 e não existe esse usuário no contêiner, para exibir simplesmente o UID que recebe dos metadados. Agora, se você criar um usuário em seu contêiner com useradd -u 3000 bob
, você notará que agora o getfacl
mostra o nome bob em vez de 3.000.
Resumo : as permissões de usuário que você atribui de dentro ou de fora do contêiner são refletidas nos dois ambientes. Portanto, para gerenciar as permissões de volumes, os UIDs na máquina host devem ser diferentes dos UIDs no container .