Eu Tenho o contêiner Docker com o volume nomeado em execução no usuário não raiz iniciado com o seguinte comando:
docker run -v backup:/backup someimage
Na imagem, há um script de backup que está tentando salvar arquivos em /backup diretório, mas falha. Montado backup volume em /backup dir pertence ao usuário root.
Como alterar permissões para /backup directório?
----- EDIT1:
mcve abaixo:
Execute o contêiner docker com Gerrit:
docker run -v backupgerrit:/backup --name gerrit gerritcodereview/gerrit
Agora, em outra janela do terminal, tente salvar algo em /backup Directorio:
Os volumes nomeados são inicializados quando criados pela primeira vez para o conteúdo da imagem no local de montagem. Essa inicialização inclui o proprietário e as permissões. Se /backup não existe em sua imagem, então um diretório vazio será criado e de propriedade da raiz. Você pode:
Opção 1: Crie o diretório em seu Dockerfile com a propriedade e permissões apropriadas:
Solução de trabalho aqui. Docker em configurações padrão mantém volumes de dados em /var/lib/docker/volumes/. Baseando-se no exemplo de arquivos de perguntas de backupgerrit o volume nomeado é mantido em /var/lib/docker/volumes/backupgerrit/_data. Dir essencial é _data e suas permissões. Neste exemplo, o contêiner Gerrit usa um usuário com id 1000. A solução é definir a propriedade disso _data dir para 1000:1000.
# chown 1000:1000 /var/lib/docker/volumes/backupgerrit/_data# ls -ln /var/lib/docker/volumes/backupgerrit/drwxr-xr-x 2 1000 1000 4096 Feb 25 12:19 _data/
E é assim que parece do lado do contêiner:
# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESeaa816980be5 gerritcodereview/gerrit "/entrypoint.sh" 31 minutes ago Up 31 minutes 8080/tcp, 29418/tcp gerrit# docker exec gerrit iduid=1000(gerrit) gid=1000(gerrit) groups=1000(gerrit)# docker exec gerrit ls -l / | grep backupdrwxr-xr-x 2 gerrit gerrit 4096 Feb 25 11:19 backup# docker exec gerrit touch /backup/testfile# docker exec gerrit ls -l /backuptotal 0-rw-r--r-- 1 gerrit gerrit 0 Feb 25 11:19 testfile
Permissões de _data dir são persistentes até remover o volume com