O comando do Docker não pode se conectar ao daemon do Docker

246

Quero mudar para o Docker, então comecei a mexer com isso. Instalei o Docker em uma instalação do VirtualBox Ubuntu 15.10 (Wily Werewolf) e, conforme sugerido aqui , tentei executar um nginx básico Docker:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Então, verifiquei se o Docker estava em execução:

$ sudo service docker status
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since vr 2015-11-06 08:41:48 CET; 15min ago
     Docs: https://docs.docker.com
 Main PID: 7542 (docker)
   CGroup: /system.slice/docker.service
           └─7542 /usr/bin/docker daemon -H fd://

nov 06 08:41:47 kramer65-VirtualBox systemd[1]: Starting Docker Application Container Engine...
nov 06 08:41:47 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:47.900410966+01:00" level=info msg="API ...ock"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.033514149+01:00" level=info msg="Fire...lse"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.141594321+01:00" level=info msg="Defa...ess"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.416294436+01:00" level=warning msg="Y...it."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.565507576+01:00" level=info msg="Load...rt."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567907022+01:00" level=info msg="Load...ne."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567945214+01:00" level=info msg="Daem...ion"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567969891+01:00" level=info msg="Dock....9.0
nov 06 08:41:48 kramer65-VirtualBox systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

Isso sugere que o daemon do Docker já está em execução, mas para ter certeza de que iniciei o daemon do Docker manualmente:

$ sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock           
INFO[0000] [graphdriver] using prior storage driver "aufs" 
INFO[0000] Firewalld running: false                     
INFO[0000] Default bridge (docker0) is assigned with an IP address XXX.XX.X.X/XX. Daemon option --bip can be used to set a preferred IP address 
WARN[0000] Your kernel does not support swap memory limit. 
INFO[0000] Loading containers: start.                   

INFO[0000] Loading containers: done.                    
INFO[0000] Daemon has completed initialization          
INFO[0000] Docker daemon                                 commit=76d6bc9 execdriver=native-0.2 graphdriver=aufs version=1.9.0

Tentei executar a imagem novamente, mas com o mesmo resultado:

$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Eu tentei executar o comando, mas sem sucesso. O que eu estou fazendo errado aqui?

kramer65
fonte
1
mesmo problema. Também estou no Ubuntu 15.10 :(
Daniel Loureiro
1
mesmo problema, ubuntu 15.10
Lucas Tettamanti
1
Basta reiniciar o serviço docker, isso é tudo. Obrigado @jim <pre> sudo service docker restart </pre>
Nasruddin
1
Nasrudin, que com certeza não funcionou para mim ... :-(
Rafael_Espericueta
1
Eu tive que reiniciar a máquina para fazê-la funcionar.
Romaroma 11/08/16

Respostas:

443

Você precisa adicionar seu usuário atual ao grupo de janelas de encaixe da seguinte maneira:

sudo usermod -aG docker $(whoami)

em seguida, efetue logout e login novamente no sistema ou reinicie o sistema. teste pordocker version

para obter mais informações sobre como instalar o docker-engine, siga a documentação do docker

Zubair Alam
fonte
bobagem, mas ele trabalhou para mim também @RobinLoxley, esta deve ser uma resposta real e não apenas um comentário, deixe-me saber se você postá-lo, eu vou dar-lhe um upvote;)
Benka
9
Gostaria de sublinhar "o logout e logon novamente para o sistema ou reiniciar o sistema"
Michele
3
A resposta do @Junaid abaixo mostra como evitar a etapa de logout / login, caso você seja, como eu, tão preguiçoso que não queira reiniciar seus aplicativos;)
Brandizzi
Isso é exatamente o que foi mencionado no tutorial do Docker, mas fazer logoff e logon novamente não funcionou para mim. Eu tive que reiniciar o sistema para fazê-lo funcionar.
aalaap
4
Vejo informações sobre a versão do Docker, mas no final da saída, vejo Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Ghanbari
137

Adicione o usuário ao grupo de janelas de encaixe

  • 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:

    sudo gpasswd -a ${USER} docker

  • Reinicie o daemon do Docker:

    sudo service docker restart

  • Faça um newgrp dockerou efetue logout / logon para ativar as alterações nos grupos.

neo
fonte
1
Parece que newgrp dockeré local para o shell, não a sessão de logon. Isso não está nada claro na página de manual.
bergey
1
Trabalhou para mim. Obrigado!
Apokai
A única resposta que funcionou! Em uma máquina Linux em nuvem privada, e ainda funcionou!
Meghna Natraj 29/09
Trabalhou no Ubuntu 18.04! Obrigado
Kshitij Saraogi
33

Normalmente, o seguinte comando faz o truque:

sudo service docker restart

Isso, em vez de docker startnos casos em que o Docker parece já estar em execução.

Se isso funcionar, como sugerido e em outra resposta e neste problema do GitHub , se você não se adicionou ao grupo de janelas de encaixe, faça isso executando:

sudo usermod -aG docker <your-username> 

E você provavelmente está pronto para ir.


Quanto a qualquer outra pessoa que se depare com isso, em algumas janelas de encaixe do SO não é iniciado logo após a instalação e, como resultado, o mesmo can't connect to daemon messageaparece. Nesse caso, você pode primeiro verificar se o Docker realmente não está em execução, verificando o status do seu serviço docker executando:

sudo service docker status

Se a saída se parecer com: em docker stop/waitingvez de docker start/running, process 15378, obviamente significa que o Docker não está ativo. Nesse caso, certifique-se de iniciá-lo com:

sudo service docker start

E, como antes, você provavelmente estará pronto.

Dimitris Fasarakis Hilliard
fonte
18

note to self: Recebo o erro no título da pergunta quando esqueço de executar o dockercomando com sudo:

sudo docker run ...

[Ubuntu 15.10]

Martin Vseticka
fonte
12

Tive o mesmo problema e o que funcionou para mim foi:
Verificar a propriedade do /var/run/docker.sock

ls -l /var/run/docker.sock

Se você não é o proprietário, altere a propriedade com o comando

sudo chown *your-username* /var/run/docker.sock

Em seguida, você pode prosseguir e tentar executar os comandos do docker sem problemas: D

kevthanewversi
fonte
2
Depois de esgotar todas as outras possibilidades, foi isso que fez funcionar no Sabayon / Gentoo Linux para mim.
gerrit_hoekstra
Esse arquivo pertence a, rootmas em dockergrupo. A abordagem correta é atribuir seu usuário atual ao dockergrupo, de acordo com a documentação do Docker:sudo groupadd docker && sudo usermod -aG docker $USER
Lucas Bustamante
9

Depois de instalar tudo e iniciar o serviço, tente fechar o terminal e abra-o novamente e tente puxar sua imagem

Editar

Também tive esse problema novamente, se a solução acima não funcionar, tente esta solução que é o comando abaixo

sudo mv /var/lib/docker/network/files/ /tmp/dn-bak

Considerações

Se o comando acima funcionar, você provavelmente está com problemas no docker de rede, de qualquer maneira isso o resolve.

tail -5f /var/log/upstart/docker.log

Se a saída tiver algo parecido

FATA[0000] Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints 
/var/run/docker.sock is up

Você realmente está com problemas de rede, no entanto, ainda não sei se na próxima vez que você reiniciar ( atualização , 2 meses sem problemas novamente), seu sistema operacional receberá esse problema novamente e se for um bug ou um problema de instalação

Minha versão do Docker

Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 13:12:04 UTC 2015
 OS/Arch:      linux/amd64
deFreitas
fonte
8

Após instalar o docker no Ubuntu, executei o seguinte comando:

sudo service docker start

Tentaste?

yushulx
fonte
6

Eu tive o mesmo problema. Está lutando há dois dias para resolvê-lo.

Só funcionou quando eu fiz:

  1. De acordo com o Tutorial do Docker , você precisa adicionar a chave do Docker se ainda não tiver sido adicionada usando:

    $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -

  2. Em seguida, verifique se você concede privilégios de docker a si mesmo usando:

    $ sudo usermod -aG docker $USER

Espero que isso ajude voçe tambem.

AmrMohallel
fonte
2
A etapa 2 pode ser simplificada da seguinte maneira:sudo usermod -aG docker $USER
johntellsall 3/16
5

entre como root ( sudo su) e tente o seguinte:

unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx

Eu tenho o mesmo problema aqui, e o comando docker só funcionou como root e também com este DOCKER_HOSTvazio

PS: tenha cuidado também que a maneira correta e oficial de instalar no Ubuntu é usar seus repositórios apt (até 15.10), não com a coisa " wget ".

Daniel Loureiro
fonte
que "wget" coisa basta colocar o repositório janela de encaixe na sua fonte apt .... ou seja, a mesma coisa que você está convidado a manualmente fazer no "maneira correta e oficial" ....
Alar
1
Receio que você esteja errado, Alar. O método "wget" adicionará o repositório do docker à sua fonte apt, o que é bom, mas também fará muitas outras coisas ruins, como definir um DOCKER_HOST env var, o que impedirá que o docker seja executado imediatamente. Não é porque os dois métodos adicionem a janela de encaixe ao repositório que ambos são iguais.
Daniel Loureiro
5

Para OSX :

Após abrir o docker e iniciar a máquina 'padrão' através do Quickstart Terminal ( https://docs.docker.com/engine/installation/mac/ ), tente os comandos do docker e a mensagem "não é possível conectar-se ao daemon do docker" , você precisará de algumas variáveis ​​env definidas :

eval "$(docker-machine env default)"

Em seguida, experimente docker run hello-worldpara ver se está tudo bem.

Danny
fonte
5

Para aqueles que já tentaram reiniciar sua máquina, desmarque a variável de ambiente DOCKER_HOST conforme informado na documentação do docker env e todo o resto tente seguir com o

sudo service docker restart

Só isso fez o truque para mim, mesmo depois de reiniciar a máquina.

Mr.Moe
fonte
2
Isso é necessário se você efetuar logout e login apenas.
Zhang Longqi
4

Dando acesso não raiz - da janela de encaixe

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.

Pode ser necessário sair e fazer login novamente para que isso entre em vigor.

$ sudo gpasswd -a ${USER} docker

Reinicie o daemon do Docker.

$ sudo service docker restart
Eduardo Marín Izquierdo
fonte
3

Atualmente, esta pergunta é o número 3 em uma pesquisa no Google. Depois de fazer algumas pesquisas para resolver esse problema no meu sistema Linux, pensei em escrever essa resposta. A postagem original informa que o problema está no Ubuntu, mas também experimentei o problema usando o Fedora. Com isso em mente, 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 janelas 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 docker está em execução

$> service docker status

E uma última verificação final

$> docker run hello-world
Ronald Weidner
fonte
No Fedora 23, esse grupo pode ser chamado dockerroot. Além disso, você provavelmente vai querer instalá-lo a partir do repositório (em vez de curl ... | sh) para que possa ser atualizado mais tarde:dnf install docker
basic6
muitos não têm uma "janela de encaixe" do grupo, por isso temos de adicioná-lo primeiro groupadd dockere depois adicioná-lo ao seu nome de usuáriosudo usermod -aG docker your_username
TonyTony
2

Tente usar "sudo" com o comando que você está executando.

user3737461
fonte
"Tentei executar o comando, mas sem sucesso. Alguém sabe o que estou fazendo de errado aqui? Todas as dicas são bem-vindas!"
RhinoDevel 02/04
2

Eu tenho o mesmo problema ao executar o docker.

você pode executar comandos como usuário sudo :

sudo docker ***your command here***
Dadaso Zanzane
fonte
2

Para o Ubuntu:
aconteceu comigo quando atualizei o docker.
Você precisa desmascarar o serviço e o soquete e, em seguida, reiniciar o serviço.

A seguir trabalhou para mim:

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service

O que aconteceu nos bastidores O
systemd também tem a capacidade de marcar uma unidade como completamente instável, automática ou manualmente, vinculando-a a / dev / null. Isso é chamado de mascaramento da unidade e é possível com o comando mask.

sudo systemctl mask docker.service

Você pode verificar a lista de serviços mascarados usando:

sudo systemctl list-unit-files

Saída do sudo systemctl list-unit-files

Para ativar o início automático / manual do serviço, você precisa desmascará-lo usando:

sudo sytemctl unmask docker.service

Agora o serviço será ativado como mostrado abaixo insira a descrição da imagem aqui

lordzuko
fonte
1

Como o docker se liga a um soquete unix que pertence ao root durante a inicialização, o uso de 'sudo' junto com os comandos do docker funcionará.

rajá
fonte
1
  1. Eu também tive o mesmo problema. O problema estava nos soquetes alocados ao docker-daemon e docker-client.
  2. Primeiro, a permissão não foi definida para o docker-client no docker.sock. Você pode configurá-la usando "sudo usermod -aG docker $ USER"
  3. Em seguida, verifique seu arquivo bash onde o docker-client está executando, para mim estava em 0.0.0.0:2375, enquanto o docker-daemon estava executando no soquete unix (foi definido no arquivo de configuração do dockerd).
  4. Apenas comente a linha de base e funcionará bem.
  5. Mas se você quiser fazê-lo funcionar na porta TCP em vez do soquete unix, altere o arquivo de configuração do dockerd e defina-o em 0.0.0.0.2375 e mantenha a linha no bash como está presente ou defina-a como 0.0.0.0: 2375
Nilesh Kande
fonte
1

Talvez isso ajude alguém, pois a mensagem de erro é extremamente inútil e eu já havia passado por todas as etapas de permissão padrão várias vezes sem sucesso.

O Docker ocasionalmente deixa variáveis ​​de ambiente fantasma no local que bloqueiam o acesso, apesar do sistema estar configurado corretamente. Os seguintes comandos do shell podem torná-lo acessível novamente, se você o executou em um ponto e parou de cooperar após uma reinicialização:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

Eu tinha uma instalação do docker em funcionamento anteriormente e, após reiniciar o meu laptop, ele simplesmente se recusou a funcionar. Foi corretamente adicionado ao grupo de usuários estivador, tinha as permissões corretas no socket, etc, mas ainda não podia correr docker login, docker run ...etc. Isso fixa-lo para mim. Infelizmente eu tenho que executar isso em cada reinicialização. Isso é mencionado em algumas questões do github também como uma solução alternativa, embora pareça um bug que essa seja uma barreira persistente para corrigir a operação do Docker (nota: eu estou no Arch Linux, não no OSX, mas esse foi o mesmo problema para mim).

mopsyd
fonte
1

Testado no Ubuntu 16.04

# Create the docker group and add your user to the docker group
groupadd docker
usermod -aG docker $USER
newgrp docker

# Configure docker service to be exposed
mkdir -p /etc/systemd/system/docker.service.d
echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376' >> /etc/systemd/system/docker.service.d/override.conf

# restart service
systemctl daemon-reload
service docker restart
Thiago Falcao
fonte
0

Eu enfrentei o mesmo erro na instância do Amazon EC2. O problema foi corrigido após reiniciar a instância.

Sumit Bhoyar
fonte
0

Adicione o usuário atual ao grupo de janelas de encaixe:

sudo usermod -aG docker $(whoami)

POTHULA DE BALAJI
fonte
Por favor, formate isso como código! E explique este comando. E use as --versões longas (começando com ) das opções.
buhtz
0

Para Ubuntu 16.04

/lib/systemd/system/docker.serviceAlteração interna do arquivo :

ExecStart=/usr/bin/dockerd fd://

com:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

/etc/init.d/dockerAlteração interna do arquivo :

DOCKER_OPTS=

com:

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

e, em seguida, reinicie o computador.

user6646280
fonte