Correr aplicações com Docker como uma rotina diária pode se tornar um pesadelo quando você encontra um erro como permissão negada do Docker ao tentar se conectar. Mas não se preocupe, este artigo irá ajudá-lo a voltar a funcionar em pouco tempo.
Neste tutorial, você aprenderá muitas maneiras de resolver a temida mensagem de erro de permissão negada do Docker.
Pré-requisitos
Este tutorial inclui demonstrações práticas. Para acompanhar, certifique-se de ter o seguinte em vigor:
- As demonstrações neste tutorial são executadas no Ubuntu 20.04, mas outras distribuições Linux também funcionarão.
- O mecanismo Docker, com o tutorial executando na versão 20.10.8, compilação 3967b7d.
Executando Comandos Docker Elevados
Muitos fatores podem levar a um erro de permissão negada ao se conectar ao Docker. Um desses fatores é que você pode estar executando comandos Docker sem anteceder o comando sudo
. O comando sudo
é o que concede direitos administrativos elevados junto com privilégios de segurança ao executar comandos.
Abaixo, você pode ver o temido erro de permissão negada ao tentar executar um comando docker
.

Execute o terminal e anteceda o comando docker
abaixo com sudo
para executar
a imagem Docker hello-world
. Como você está executando um comando elevado, precisará digitar sua senha para prosseguir.
Você verá uma saída semelhante à mostrada abaixo, que indica que o Docker está instalado corretamente.

Reiniciando o Docker Engine
Se executar comandos elevados do Docker não corrigir o erro de permissão negada, verifique se o seu Motor Docker está em execução. Assim como executar um comando docker
sem o comando sudo
, um Docker Engine parado aciona o erro de permissão negada. Como você corrige o erro? Reiniciando o seu motor Docker.
Execute o comando systemctl
abaixo para confirmar o status do Docker Engine (status docker
) e se está em execução.
Abaixo, você pode ver que o Docker Engine está em execução a partir do status retornado que mostra umctive (running).

Se o Docker Engine não estiver ativo, execute o comando systemctl
abaixo para iniciar o Docker Engine (start docker
).
Agora, execute o comando do Docker “hello-world” como fez na seção “Executando Comandos do Docker com Privilégios Elevados” para verificar se o erro foi resolvido.
Adicionando Conta de Usuário a um Grupo com Acesso de Usuário Não Root
Você confirmou que o seu mecanismo Docker está funcionando, mas ainda está recebendo um erro de permissão negada do Docker “permission denied”? Se sim, você precisa adicionar sua conta de usuário a um grupo com acesso de usuário não root. Por quê? Porque qualquer comando Docker que você execute em uma máquina Linux que não esteja no grupo de usuários aciona um erro de permissão negada.
- Execute o comando
groupadd
abaixo para criar um novo grupo chamadodocker
. Insira sua senha para continuar executando o comando.
Se o grupo docker existir no grupo de usuários, você verá uma saída semelhante à mostrada abaixo.

2. Em seguida, execute o comando usermod
abaixo, onde as opções -aG
dizem ao comando para adicionar sua conta de usuário (programmer
) ao grupo (docker
). Este comando faz com que sua conta de usuário tenha acesso não root.
3. Execute o comando newgrp
abaixo para alterar o ID de grupo real atual para o grupo docker
.
Execute este comando sempre que quiser executar o Docker como um usuário não root.
4. Finalmente, execute novamente a imagem hello-world do Docker para confirmar que você não vê mais o erro. Se, neste ponto, ainda estiver recebendo um erro, considere dar mais acesso ao arquivo docker.sock. O arquivo docker.sock é o socket UNIX, uma forma de comunicar informações de processo entre o usuário e o sistema, que o daemon do Docker escuta como o ponto de entrada da API do Docker.
Execute o comando chmod
abaixo para conceder a todos os usuários acesso de leitura/escrita (666
) ao arquivo /var/run/docker.sock
. Agora, execute novamente a imagem hello-world do Docker para ver se o erro foi resolvido.
Editando o Arquivo de Unidade de Serviço do Docker
Se executar o Docker como um usuário não-root não for suficiente para corrigir o erro, tente editar o arquivo de unidade de serviço do Docker SystemD, um sistema de controle de serviço. O arquivo de serviço do Docker contém parâmetros sensíveis que podem alterar o comportamento do daemon do Docker. Você pode modificar o comportamento padrão do arquivo de unidade do Docker adicionando um comando extra para alterar o comportamento padrão do serviço.
1. Execute o comando abaixo para abrir o arquivo de unidade de serviço do Docker no seu editor de texto favorito. Neste exemplo, o arquivo de serviço do Docker é aberto no editor de texto nano.
2. Localize a área com o cabeçalho [Serviço] dentro do arquivo de unidade de serviço do Docker, conforme mostrado abaixo. Copie/cole os comandos abaixo para o arquivo de unidade de serviço do Docker e salve as alterações.
Abaixo, o comando SupplementaryGroups
define os grupos Unix suplementares para onde os processos são executados. Ao mesmo tempo, o comando ExecStartPost
realiza operações de limpeza que são executadas mesmo se o serviço falhar ao inicializar corretamente.

3. Agora, execute os comandos abaixo para reiniciar e habilitar o serviço do Docker. Fazendo isso permite que você inicie o serviço do Docker novamente para evitar erros ao executar comandos do Docker.
4. Por fim, execute novamente a imagem Docker hello-world
e veja se ainda obtém o erro de permissão negada.
Executando o Docker no Modo de Privilégio
Por último, mas não menos importante, na lista de correção do erro de permissão negada do Docker está executar o Docker em modo privilegiado. Fazê-lo concede a um contêiner Docker acesso root ao sistema.
Executar o Docker no modo privilegiado é arriscado e vulnerável a ataques de hackers. Portanto, seja cauteloso e execute o Docker no modo privilegiado apenas quando souber exatamente o que está fazendo.
1. Execute o comando abaixo para listar todos os contêineres Docker no seu sistema e obter o ID do contêiner que você deseja executar.

2. Em seguida, execute o comando docker inspect
abaixo para verificar se o contêiner que você deseja executar já está no modo privilegiado (--format='{{.HostConfig.Privileged}}'
). Substitua CONTAINER_ID
abaixo pelo ID do contêiner real que você anotou no passo um.
Se o contêiner estiver no modo privilegiado, o comando retornará um valor true para o console. Mas se o comando retornar um valor falso, como mostrado abaixo, avance para o próximo passo.

3. Por fim, execute o comando docker
abaixo para executar
o contêiner Docker no modo privilegiado (--privileged hello-world
).
Conclusão
Ao longo deste tutorial, você aprendeu muitas maneiras de resolver o erro de permissão negada do Docker, desde a execução de comandos elevados até a execução do Docker no modo privilegiado.
Agora você sabe como se livrar de um erro ao construir aplicações Docker; talvez você também queira manter suas imagens Docker limpas o tempo todo?
Source:
https://adamtheautomator.com/docker-permission-denied/