Como resolver problemas de permissão para docker no ubuntu?


35

Eu instalei o docker conforme descrito aqui . Eu uso o Ubuntu Trusty 14.04 (LTS) (64 bits) . Tudo durante a instalação estava bem. Também o comando é $ sudo docker run -i -t ubuntu /bin/bashconcluído com êxito (depois que eu digitei "exit" no console aberto. Mas quando estou tentando fazer outra coisa, recebo "permissão negada". Por exemplo:

`$ sudo docker run -d -P training/webapp python app.py`

Reuslts em Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

Reuslts em Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

Como resolver isso? Pesquisei no Google sobre o problema, mas não consigo encontrar uma solução para o meu caso.

Respostas:


50

Adicione o grupo de janelas de encaixe se ele ainda não existir.

$ sudo groupadd docker

Adicione o usuário conectado ${USER}ao grupo de janelas de encaixe. Altere o nome do usuário para corresponder ao seu usuário preferido.

$ sudo gpasswd -a ${USER} docker

Reinicie o daemon do Docker:

$ sudo service docker restart # Or docker.io for older versions
# 18.04+ with snap:
$ sudo systemctl restart snap.docker.dockerd

Você deve sair e entrar novamente para atualizar as permissões do grupo. Para evitar isso, você pode mudar para um subshell da seguinte maneira. Ou use qualquer um dos outros truques mencionados nesta pergunta :

su - $USER

14
Eu tive que reiniciar para que isso tivesse efeito.
Obsoleter

8
Não precisa reiniciar, basta sair e fazer login.
precisa

2
Logout fez isso, mesmo quando exec $SHELLnão fez. Estou interessado em saber por qual mecanismo de logoff resolveu o problema. Isso não é janelas!
Darth Egregious

1
No Fedora, primeiro você deve editar /etc/selinux/confige colocar SELINUX=disabled, em seguida, reiniciar o Linux
Junior M

1
Ótima explicação! Você é o melhor! :)
Francis Rodrigues

5

Se você estiver executando o CentOS ou RedHat, pode ser necessário desativar o SELinux primeiro executando:

setenforce 0

Depois, reinicie o Eiter para reativar o SELinux ou executar setenforce 1.


4

Eu tive o mesmo problema, devido ao selinux. Você pode verificar se o selinux é o culpado:

  1. Desativando o selinux: setenforce 0
  2. Repetindo

Se a desativação do selinux resolveu seu problema, não é uma razão para deixá-lo desativado:

  1. Ative o selinux: setenforce 1
  2. Permita a conexão do soquete na configuração selinux: setsebool docker_connect_any true
  3. Execute seu contêiner Docker com a --priviledgedopção

3

Presumo que seu nome de usuário já esteja no grupo de janelas de encaixe. Para verificar isso, emita o comando abaixo.

id -nG

Caso contrário, você precisa adicionar seu usuário ao grupo de janelas, abaixo do comando.

sudo groupadd docker
sudo usermod -aG docker $USER

Quando você executa o comando sudo systemctl start docker, ele cria um processo de janela de encaixe. Esse processo da janela de encaixe contém dockerdencadeamento daemon. O comando também cria um docker.socksoquete Unix padrão . O docker.socksoquete é escutado continuamente pelo dockerdencadeamento daemon. Isso faz com que você possa executar o IPC no nível do kernel com o docker.pidprocesso. Para poder usar esse soquete de janela de encaixe, é necessário ter a permissão adequada do nível do processo ( docker.pid) e do nível do arquivo ( docker.sock). Portanto, a execução abaixo de dois comandos deve resolver seu problema. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid


1

Pela versão atual , não precisamos adicionar o grupo docker.
Existe automaticamente pela instalação. Você pode verificar usando o comando:

$ sudo groupadd docker
groupadd: group 'docker' already exists

Portanto, para gerenciar o Docker como um usuário não raiz , basta adicionar seu usuário ao grupo de janelas de encaixe e sair e efetuar login novamente, para que sua associação ao grupo seja reavaliada:

$ sudo usermod -aG docker $USER
$ logout

Para verificar quando você faz login novamente

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

Você pode até forçar a usar GROUP:dockercomo seu novo grupo principal:

$ sudo chown "$USER":"docker" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
$ sudo usermod -g docker ${USER}
$ logout

Para verificar quando você faz login novamente

$ id
uid=1001(<user_name>) gid=999(docker) groups=999(docker),...
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.