Executar aplicativos com Docker como uma rotina diária pode se tornar um pesadelo quando você se depara com 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 compreende demonstrações práticas. Para acompanhar, certifique-se de ter o seguinte em mãos:
- 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 a versão do tutorial sendo 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 preceder o comando sudo
. O comando sudo
é o que lhe dá direitos administrativos elevados juntamente 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
.

Abra o terminal e adicione o comando sudo
antes do comando docker
abaixo para executar a imagem hello-world
do Docker. Como você está executando um comando elevado, você precisará inserir 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 a execução de comandos do Docker elevados não corrigir o erro de permissão negada, verifique se o seu Docker Engine está em execução. Assim como a execução de 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 Docker engine.
Execute o comando systemctl
abaixo para confirmar o status do Docker Engine (status docker
) e se ele 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 Docker hello-world como fez na seção “Executando Comandos Docker com Privilégios” 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 seu mecanismo Docker está funcionando, mas ainda está recebendo um erro de permissão negada do Docker permission denied? Se sim, é necessário 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 permission denied.
- 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
indicam ao comando que adicione sua conta de usuário (programmer
) ao grupo (docker
). Esse comando faz com que sua conta de usuário tenha acesso de não-root.
3. Execute o comando newgrp
abaixo para alterar o ID do grupo real atual para o grupo docker
.
Execute este comando sempre que quiser executar o Docker como usuário não-root.
Por fim, execute novamente a imagem Docker hello-world para confirmar que você não está mais vendo o erro. Se, neste ponto, você ainda estiver recebendo um erro, então considere conceder mais acesso ao arquivo docker.sock. O arquivo docker.sock é o socket UNIX, uma forma de comunicação de informações de processo entre o usuário e o sistema, que o daemon Docker escuta como 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 Docker hello-world 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 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. Para este exemplo, o arquivo de serviço do Docker será 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 onde os processos são executados. Ao mesmo tempo, o comando ExecStartPost
limpa as operações que são executadas mesmo se o serviço falhar ao iniciar corretamente.

3. Agora, execute os comandos abaixo para reiniciar e habilitar o serviço do Docker. Fazendo isso, você pode iniciar o serviço do Docker novamente para evitar erros ao executar comandos do Docker.
4. Por fim, execute novamente a imagem do Docker hello-world
e veja se ainda recebe 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 no modo privilegiado. Fazendo isso, 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 containers Docker no seu sistema e obter o ID do container que você deseja executar.

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

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