Você precisa adicionar-se ao grupo docker
e ativar o grupo (fazendo logout e novamente ou executando newgrp docker
) para executar os comandos docker
. A mensagem de erro é simplesmente enganosa.
O serviço do Docker está claramente em execução:
$ systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
Docs: https://docs.docker.com
Main PID: 1015 (docker)
CGroup: /system.slice/docker.service
└─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root 1015 0.0 0.3 477048 12432 ? Ssl 2015 2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
No entanto, o próprio Docker se recusa a falar com ele:
$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Estou executando a configuração padrão do Docker , ou seja, Eu não mudei nenhum arquivo /etc
relacionado a este serviço.
Qual poderia ser o problema aqui?
Você precisa adicionar-se ao grupo docker
e ativar o grupo (fazendo logout e novamente ou executando newgrp docker
) para executar os comandos docker
. A mensagem de erro é simplesmente enganosa.
Esta pergunta já foi respondida, mas aqui está uma informação adicional.
Não importa se você está no Arch ou em outra distribuição como o Fedora ou o Ubuntu, o Docker usa um arquivo de soquete para se comunicar. Quando você executa os comandos docker
, ele usa esse soquete para conversar com o daemon do Docker. É claro que o daemon deve estar em execução (e é frequentemente desativado por padrão), mas se o usuário não puder acessar o soquete, ele não poderá se comunicar com o daemon também.
Você primeiro instalaria o Docker a partir do repositório da distribuição. Algumas pessoas baixam um script de instalação e o canalizam para um shell ( curl ... | sh
), mas é recomendado instalá-lo a partir do repositório para que ele possa ser atualizado facilmente.
Arch:
# pacman -S docker
Fedora:
# dnf install docker
Como mencionado acima, o daemon pode estar desabilitado por padrão. Se você quiser usar o Docker, o daemon deve estar em execução.
Habilite-o (para que ele seja iniciado na inicialização):
# systemctl enable docker
Inicie agora (ou reinicie):
# systemctl start docker
Agora, por padrão (se o grupo de estivadores estiver ausente), o soquete do Docker é de propriedade de root:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
É por isso que um usuário comum não pode falar com o daemon do docker. Um usuário comum não possui permissões suficientes para acessar o soquete. Não é possível acessar o daemon, portanto, ele supõe que ele não está sendo executado e mostra esse erro: Cannot connect to the Docker daemon. Is the docker daemon running on this host?
É por isso que muitas pessoas simplesmente iniciam todos os comandos do Docker como root, usando sudo
. Mas, como descrito na outra resposta, o Docker tem seu próprio mecanismo para isso, portanto, usar o sudo não é necessário.
Idealmente, um grupo chamado docker
é criado ao instalar o Docker. No entanto, se esse grupo não existir quando o daemon for iniciado, o arquivo de soquete será de propriedade de root.
Em alguns casos, esse grupo costumava ter um nome diferente, como dockerroot
no Fedora . Verifique grep docker /etc/group
para ver se existe tal grupo no seu sistema. Se você já estiver usando esse grupo (seu usuário está nele), você precisaria configurar o Docker para usá-lo:
Em /etc/sysconfig/docker
, adicione -G dockerroot
(nota: é uma solução alternativa, não a melhor solução):
OPTIONS='--selinux-enabled -G dockerroot'
Após reiniciar o daemon, seu usuário poderá acessar o soquete:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
Caso contrário, o modo oficial seria usar o grupo chamado docker
. Se existir, o Docker irá utilizá-lo automaticamente, ou seja, definir o grupo do soquete para esse grupo. Se não existir, tudo o que você precisa fazer é criá-lo e reiniciar o daemon:
# groupadd docker
# systemctl restart docker
O arquivo de soquete pertencerá a esse grupo:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
Seu usuário deve estar no grupo docker
para poder acessar o soquete:
# usermod -aG docker (user)
Você pode ter que sair e fazer login novamente (ou su - (user)
), executar id
para ver se você está no grupo.
Você pode usar o Docker sem sudo / root:
$ docker version --format '{{.Server.Version}}'
1.9.1
Finalmente, uma palavra de aviso. Somente usuários confiáveis devem ter permissão para controlar seu daemon do Docker . Consulte o link .
(Mas, claro, o mesmo vale para o sudo - somente usuários confiáveis devem estar no grupo wheel
.)
sudo usermod -aG docker [username]
faça o logout e faça login novamente
Depois de fazer algumas pesquisas sobre como resolver esse problema no meu sistema Linux, pensei em escrever essa resposta. Aqui está o que eu fiz para corrigir o problema.
No Fedora 22
Instalando o Docker:
$> curl -fsSL https://get.docker.com/ | sh
Depois de instalar o Docker:
Um usuário precisa ser adicionado ao grupo de encaixe.
$> sudo usermod -aG docker
O daemon do docker precisa ser iniciado
$> sudo service docker start
Você pode configurar o daemon para iniciar na inicialização
$> sudo chkconfig docker on
Você pode verificar se o serviço de encaixe está sendo executado
$> service docker status
E um último teste final
$> docker run hello-world
Se você estiver usando o Fedora 23 ou a variante Redhat, edite /etc/sysconfig/docker
e modifique o seguinte
OPTIONS='--selinux-enabled --log-driver=journald -G yourdockergroup'
Reinicie a janela de encaixe.
Certifique-se de adicionar este grupo ao sistema e adicione-se ao grupo.
Esse comando funciona para mim
sudo grep dwalsh /etc/sudoers
alias docker="sudo /usr/bin/docker"
Encontrei a solução nesta página se você precisar de mais documentação. Por que não permitimos que usuários não-root executem o Docker no CentOS, Fedora ou RHEL
Eu também tive o mesmo problema. O problema estava nos sockets alocados para o docker-daemon e o docker-client.
Primeiro, a permissão não foi definida para o docker-client no docker.sock. Você pode defini-lo usando sudo usermod -aG docker $USER
Em seguida, verifique seu arquivo bash em que o docker-client está sendo executado. Para mim, foi definido como 0.0.0.0:2375, enquanto o docker-daemon estava sendo executado no unix socket. (Foi definido no arquivo de configuração do dockerd).
Apenas comente a linha ofensiva e ela funcionará bem.
Mas se você quiser fazê-lo funcionar na porta TCP ao invés do socket unix, então mude o arquivo de configuração do dockerd, configure-o para 0.0.0.0.2375, e mantenha a linha no bash como está se presente ou defina-o como 0.0.0.0:2375.
Se você iniciou o seu mecanismo docker com: docker service sudo start
você não pode se conectar com o usuário normal, mesmo que tenha se adicionado ao grupo "docker".
Você pode simplesmente pará-lo com: sudo docker service stop
e inicie-o como um usuário normal: início da janela de serviço
Estes são os passos que segui para corrigir o seguinte
$ docker info
Cannot connect to the Docker daemon at
tcp://localhost:2375/usr/lib/systemd/system/docker.socket. Is the docker daemon running?
Adicione seu auto ao grupo de encaixe
usermod -aG docker $USER
Corrigir permissões no docker socker e no comando.
sudo chgrp docker /usr/bin/docker
e sudo chgrp docker /var/run/docker.sock
$ ll $(which docker)
-rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*
$ ll /var/run/docker.sock
srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock
Adicionar variáveis ao ambiente de configuração para o comando do docker
export DOCKER_HOST=unix:///var/run/docker.sock
Rest Docker
sudo systemctl restart docker
Tags docker arch-linux