Estou em um contexto do Docker e estou usando namespaces de usuário para mapear o usuário do meu contêiner para o usuário do meu host (digamos foo). Como eu uso o portainer (como um container), eu preciso ligar o soquete do Docker.
$ll /var/run/docker.sock
srw-rw---- 1 root docker 0 nov. 14 11:47 /var/run/docker.sock
$sudo cat /etc/docker/daemon.json
{
"userns-remap": "foo"
}
$id
uid=1000(foo) gid=1000(foo) groupes=1000(foo),999(docker)
$getent group docker
docker:x:999:foo
Mesmo que meu usuário foo tenha permissão para acessar os arquivos do grupo de estivadores e o Docker esteja usando meu usuário foo para executar processos docker, meu portainer não tem permissão para acessar o soquete.
Agora, se eu adicionar esta linha ao / etc / subgid, meu problema está resolvido:
foo:999:1
Meu entendimento desta linha é: foo user tem permissão para acessar o primeiro grupo com gid a partir de 999, que é 999 (999 + 0). Meu usuário foo tem permissão para acessar o 999 gid, que é o grupo docker.
Como eu posso ver, há uma diferença entre:
$getent group docker
docker:x:999:foo
e
grep 999 /etc/subgid
foo:999:1
Minha pergunta: Qual é a diferença entre essas duas configurações e por que preciso da configuração do subgid para permitir que meu contêiner acesse meu soquete do Docker?
Obrigado!