Como corrigir o docker: problema com permissão negada

303

Instalei o Docker na minha máquina onde tenho o Ubuntu OS. Depois que eu instalei o docker, quando executo

sudo docker run hello-world

Tudo bem, mas quero ocultar a palavra sudopara encurtar o comando.

Se eu escrever o comando sem a palavra sudo

docker run hello-world

Que exibem o seguinte:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.

Aconteceu o mesmo quando tento fazer

docker-compose up

Como posso resolver isto?

Carlos Andres
fonte

Respostas:

439

Se você deseja executar a janela de encaixe como usuário não raiz, é necessário adicioná-lo ao grupo de janela de encaixe.

  1. Crie o grupo de janelas de encaixe se ele não existir
$ sudo groupadd docker
  1. Adicione seu usuário ao grupo de janelas de encaixe.
$ sudo usermod -aG docker $USER
  1. Execute o seguinte comando ou Logout, efetue login novamente e execute (isso não funciona, pode ser necessário reiniciar sua máquina primeiro)
$ newgrp docker
  1. Verifique se o docker pode ser executado sem raiz
$ docker run hello-world

Retirado da documentação oficial do docker: gerenciar-docker-como-não-root-user

mkb
fonte
70
Eu ainda tenho esse problema depois de executar as três etapas "(
Anand
78
Eu tive que reiniciar no Ubuntu 18 para que ele funcionasse - simplesmente sair e entrar novamente não funcionou.
heez 23/08/18
26
@heez uma reinicialização pode não ter sido necessária, reiniciar o docker foi suficiente para mim. sudo systemctl restart docker
Rattle
5
Observe que estar no dockergrupo concede essencialmente acesso root , sem impor políticas e auditorias regulares do sudo. Consulte a edição nº 9976 do GitHub para obter detalhes e discussão.
raehik 11/01/19
13
Reiniciar janela de encaixe não funcionou para mim, única reinicializado fez (Ubuntu 18.04)
Joakim Alto
360

Após uma atualização, obtive a permissão negada. Executando as etapas das etapas de pós-instalação do 'mkb' não mudam nada porque meu usuário já estava no grupo 'janela de encaixe'; Repito duas vezes, sem sucesso.

Após uma hora de pesquisa, a seguinte solução finalmente funcionou:

sudo chmod 666 /var/run/docker.sock

A solução veio de Olshansk .

Parece que a atualização recriou o soquete sem permissão suficiente para o grupo 'janela de encaixe'.

Problemas

Esse chmod rígido abre uma brecha de segurança e, após cada reinicialização, esse erro é iniciado novamente e é necessário executar novamente o comando acima toda vez. Eu quero uma solução de uma vez por todas. Para isso você tem dois problemas:

  • 1) Problema comSystemD : O soquete será criado apenas com o proprietário 'root' e o grupo 'root'.

    Você pode verificar este primeiro problema com este comando:

    ls -l /lib/systemd/system/docker.socket
    

    Se tudo isso for bom, você verá ' root/docker' não ' root/root'.

  • 2) Problema com o login gráfico : /superuser/1348196/why-my-linux-account-only-belongs-to-one-group

    Você pode verificar este segundo problema com este comando:

    groups
    

    Se tudo estiver correto, você deverá ver o grupo de janelas de encaixe na lista. Caso contrário, tente o comando

    sudo su $USER  -c groups
    

    se você vir o grupo de janelas de encaixe , é por causa do erro.

Soluções

Se você conseguir obter uma solução alternativa para o logon gráfico, faça o trabalho:

sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Mas se você não pode gerenciar esse bug, uma solução não tão ruim pode ser a seguinte:

sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

Isso funciona porque você está em um ambiente gráfico e provavelmente o único usuário no seu computador. Nos dois casos, você precisa de uma reinicialização (ou uma sudo chmod 666 /var/run/docker.sock)

Galigator
fonte
2
se estivador foi instalado conforme doc em docs.docker.com/install então você nunca precisa lidar com tais comandos
Scott Stensland
4
@ Scott Stensland Eu instalei o docker muitas vezes 'conforme o doc'. Eu acho que o problema vem de uma interação ruim com outro pacote não identificado.
Galigator 3/11
1
No docker-in-docker, eu estava montando incorretamente o /var/run/docker.sock no host sem o :rofinal ... assim que eu adicionei que estava
pronto
2
Eu uso o Ubuntu 18 no EC2 - AWS e prefectly funcionou. Todos os outros (sudo usermod -AG estivador $ USUÁRIO e outras coisas) não trabalho
cherah30
1
Obrigado, ele corrigiu no Ubuntu 18.04 LTS. reafirmando e adicionando groud não
Deepansh Parmani
32
  1. Adicionar grupo de janelas de encaixe
$ sudo groupadd docker
  1. Adicione seu usuário atual ao grupo de janelas de encaixe
$ sudo usermod -aG docker $USER
  1. Alternar sessão para grupo de estivador
$ newgrp - docker
  1. Execute um exemplo para testar
$ docker run hello-world
wei.liang
fonte
O newgrpcomando solicitou uma senha e não aceitou minha senha de usuário. Em vez disso, su - $USERtrabalhou para evitar sair / entrar.
precisa saber é o seguinte
18
  1. Adicionar usuário atual ao dockergrupo
sudo usermod -aG docker $USER
  1. Altere as permissões do soquete do docker para poder conectar-se ao daemon do docker /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock
0x3bfc
fonte
15

Eu resolvo este erro com o comando:

$ sudo chmod 666 /var/run/docker.sock
kumar
fonte
9

Você sempre pode tentar o Manage Docker as a non-root userparágrafo nos https://docs.docker.com/install/linux/linux-postinstall/ docs.

Depois de fazer isso também se o problema persistir, você pode executar o seguinte comando para resolvê-lo:

sudo chmod 666 /var/run/docker.sock
Pranav Bhendawade
fonte
2
Tornar o soquete do docker legível ou gravável para todos (com chmod 666) é um desastre de segurança ... Isso nunca deve ser recomendado.
Aayla Secura 17/04
6

Obtida permissão negada ao tentar conectar-se ao soquete do daemon do Docker no unix: ///var/run/docker.sock: Obtenha http: //%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json : dial unix /var/run/docker.sock: connect: permissão negada

sudo chmod 666 /var/run/docker.sock

Isso resolve meu problema.

Qinsheng Zhang
fonte
2

Para corrigir esse problema, procurei onde está a minha janela de encaixe e a composição de encaixe instalada. No meu caso, dockerfoi instalado /usr/bin/dockere docker-composefoi instalado no /usr/local/bin/docker-composecaminho. Então, escrevo isso no meu terminal:

Para encaixar:

sudo chmod +x /usr/bin/docker

Para docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

Agora não preciso escrever em meus comandos a palavra de encaixe sudo

/ ************************************************* ********************** /

ERRATA:

A melhor solução para esse problema foi comentada por @mkasberg. Cito o comentário:

That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

Muito obrigado!

Carlos Andres
fonte
2
Isso pode funcionar, você pode ter problemas futuros. Além disso, é uma vulnerabilidade de segurança. Seria melhor você se juntar ao dockergrupo, como dizem os médicos. sudo groupadd docker, sudo usermod -aG docker $USER.
Mkasberg
Hey @mkasberg! Obrigado por seu comentário! Fiz uma errata para citar sua solução. Muito obrigado!
Carlos Andres
1

O lightdm e o kwallet são enviados com um bug que parece não passar nos grupos suplementares no login. Para resolver isso, eu também, ao lado sudo usermod -aG docker $USER, tive que comentar

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

para

#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so

em /etc/pam.d/lightdm antes de reiniciar , para o grupo janela de encaixe para realmente ter efeito.

bug: https://bugs.launchpad.net/lightdm/+bug/1781418 e aqui: https://bugzilla.redhat.com/show_bug.cgi?id=1581495

Herbert
fonte
1

use este comando

sudo usermod -aG docker $USER

em seguida, reinicie o computador que funcionou para mim.

Sheetala Prasad Tiwari
fonte
1

Sério, pessoal. Não adicione o Docker nos seus grupos ou modifique o soquete posix (sem um SELinux reforçado); é uma maneira simples de tornar um root privesc. Basta adicionar um alias no seu .bashrc, é mais simples e seguro como: alias dc = 'sudo docker'.

Cacto Mamelut
fonte
1

você pode seguir estas etapas e isso funcionará para você:

  1. criar um grupo de janelas de encaixe sudo groupadd docker
  2. adicione seu usuário a este grupo sudo usermod -aG docker $USER
  3. lista os grupos para garantir que o grupo de janelas de encaixe tenha sido criado com êxito executando este comando groups
  4. execute o seguinte comando também para alterar a sessão do grupo de janelas de encaixe newgrp docker
  5. alterar a propriedade do grupo para o arquivo docker.socksudo chown root:docker /var/run/docker.sock
  6. alterar a propriedade do diretório .docker sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. finalmente sudo chmod g+rwx "$HOME/.docker" -R

Após esse teste, você pode executar docker ps -a

Ahmed Mahmoud
fonte
Eu queria uma resposta que não requer reinicialização. Esta foi a única resposta que forneceu isso. O "truque" é para chowno arquivo docker.sock.
Potherca 13/06
1

Depois de instalar o docker, criar o grupo 'docker' e adicionar usuário a ele, edite o arquivo da unidade de serviço do docker:

sudo nano /usr/lib/systemd/system/docker.service

Adicione duas linhas na seção [Serviço]:

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock

Salve o arquivo (Ctrl-X, y, Enter)

Execute e ative o serviço Docker:

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker
Gato Leopold
fonte
0

Após a instalação do Docker no Centos. Ao executar o comando abaixo, obtive um erro abaixo.

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Alterar grupo e permissão para docker.socket

[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$

Verifique usando o comando docker abaixo

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[centos@aiops-dev-cassandra3 ~]$
Srikant Patra
fonte
-4

sudo chmod 666 /var/run/docker.sock

isso me ajudou enquanto eu estava recebendo erro, mesmo ao fazer login na janela de encaixe Mas agora isso funciona completamente bem no meu sistema.

jyoti prakash sahoo
fonte
1
É muito inseguro usar esse método. Revise as instruções pós-instalação fornecidas nos comentários na pergunta principal.
Alejandro Visiedo García 12/11/19