Nas páginas de documentação do Docker, todos os comandos de exemplo são mostrados sem sudo
, como este:
docker ps
No Ubuntu, o binário é chamado de docker.io
. Também não funciona sem sudo:
sudo docker.io ps
Como posso configurar o Docker para não precisar prefixar todos os comandos do Docker com sudo?
Boas notícias: o novo docker (versão 19.03 (atualmente experimental)) poderá rodar sem root, negando os problemas que podem ocorrer usando um usuário root. Chega de mexer com permissões elevadas, root e qualquer coisa que possa abrir sua máquina quando você não quiser.
Vídeo sobre isso de [DockerCon 2019] Hardening Docker daemon com modo Rootless
A partir do docker 19.3, isso é obsoleto (e mais perigoso do que o necessário):
O manual do docker tem isso a dizer sobre isso:
Importante ler: etapas de pós-instalação para Linux (também vincula aos detalhes do Docker Daemon Attack Surface ).
Adicione o grupo docker se ele ainda não existir:
Adicione o usuário conectado "$USER" ao grupo docker. Altere o nome de usuário para corresponder ao seu usuário preferido se não quiser usar seu usuário atual:
Faça a
newgrp docker
ou faça logout/login para ativar as alterações nos grupos.Você pode usar
para verificar se você pode executar o docker sem sudo.
Para executar o comando docker sem
sudo
, você precisa adicionar seu usuário (que tem privilégios de root) ao grupo docker. Para isso execute o seguinte comando:Agora, faça o logout do usuário e faça login novamente. Esta solução é bem explicada aqui com o processo de instalação adequado.
O mecanismo pelo qual adicionar um usuário ao grupo
docker
concede permissão para executar o docker é obter acesso ao soquete do docker em/var/run/docker.sock
. Se o sistema de arquivos que contém/var/run
foi montado com ACLs habilitadas, isso também pode ser feito por meio de ACLs.Estou apenas incluindo isso para completar.
Em geral, recomendo evitar ACLs sempre que uma boa alternativa baseada em grupos estiver disponível: É melhor se os privilégios em um sistema puderem ser entendidos observando apenas as associações de grupo. Ter que varrer o sistema de arquivos em busca de entradas ACL para entender os privilégios do sistema é um fardo adicional para as auditorias de segurança.
Aviso 1 : Isso tem a mesma
root
equivalência que adicionar$USER
aodocker
grupo. Você ainda pode iniciar um contêiner de uma maneira que tenharoot
acesso ao sistema de arquivos do host.Aviso 2 : As ACLs são significativamente mais difíceis para auditorias de segurança do que a segurança baseada em grupo. Provavelmente, evite ACLs, se possível, quando você puder usar grupos, pelo menos em ambientes relevantes para auditoria.
Depois de criar o grupo docker e adicionar meu usuário a ele com
... Eu ainda tive que dar ao
/var/run/docker.sock
soquete e/var/run/docker
ao diretório as devidas permissões para fazê-lo funcionar:Saia e faça login novamente (com esse usuário), então você poderá executar comandos docker sem
sudo
:BTW: Isso foi corrigido no Ubuntu 21.10 e é necessário apenas para versões do Ubuntu inferiores a isso.
Os contêineres do Docker precisam ser executados por um usuário root. Você pode se adicionar ao
docker
grupo (por exemplo, executandosudo usermod -aG docker $USER
), mas isso facilita para qualquer pessoa com acesso à$USER
conta obter acesso root à máquina (por exemplo, montando um volume root em um contêiner privilegiado).Uma maneira mais consciente de segurança de executar contêineres do Docker como um usuário não root seria usar o Podman: https://podman.io/ . Do seu site:
Outra alternativa é o Singularity, que é mais comumente implantado em ambientes HPC: https://sylabs.io/ .