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?



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


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)


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

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

15

Eu resolvo este erro com o comando:

$ sudo chmod 666 /var/run/docker.sock



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!


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



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'.


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


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

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 ~]$

-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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.