Docker e --userns-remap, como gerenciar permissões de volume para compartilhar dados entre host e contêiner?

Na janela de encaixe, os arquivos criados dentro de contêineres tendem a ter propriedade imprevisível ao inspecioná-los a partir do host. O proprietário dos arquivos em um volume é raiz (uid 0) por padrão, mas assim que as contas de usuário não raiz são envolvidas no contêiner e gravadas no sistema de arquivos, os proprietários se tornam mais ou menos aleatórios da perspectiva do host.

É um problema quando você precisa acessar dados de volume do host usando a mesma conta de usuário que está chamando os comandos do docker.

Soluções alternativas são

forçando os UIDs dos usuários no momento da criação nos Dockerfiles (não portáteis)passando o UID do usuário host para odocker run como variável de ambiente e, em seguida, executando algunschown comandos nos volumes em um script de ponto de entrada.

Ambas as soluções podem dar algum controle sobre as permissões reais fora do contêiner.

Eu esperava que os namespaces do usuário fossem a solução final para esse problema. Eu executei alguns testes com a versão 1.10 lançada recentemente e --userns-remap definida na minha conta da área de trabalho. No entanto, não tenho certeza de que ele possa facilitar a propriedade de arquivos em volumes montados, receio que possa ser o contrário.

Suponha que eu inicie este contêiner básico

docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit

E depois inspecione o conteúdo do host:

ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/

-rw-r--r-- 1 100000 100000 6 Feb  8 19:43 test.txt

Esse número '100000' é um sub-UID do meu usuário host, mas como ele não corresponde ao UID do meu usuário, ainda não consigo editar o test.txt sem privilégios. Esse subusuário não parece ter nenhuma afinidade com meu usuário comum real fora da janela de encaixe. Não está mapeado de volta.

As soluções alternativas mencionadas anteriormente nesta postagem, que consistiam no alinhamento de UIDs entre o host e o contêiner, não funcionam mais devido aoUID->sub-UID mapeamento que ocorre no espaço para nome.

Então, existe uma maneira de executar o docker com o espaço de nome do usuário ativado (para maior segurança), enquanto ainda permite ao usuário host que está executando o docker possuir os arquivos gerados nos volumes?

questionAnswers(3)

yourAnswerToTheQuestion