El comando Docker no se puede conectar al demonio Docker

246

Quiero mudarme a Docker, así que acabo de empezar a jugar con eso. He instalado Docker en una instalación VirtualBox Ubuntu 15.10 (Wily Werewolf) y, como se sugiere aquí , intenté ejecutar una imagen básica de nginx Docker:

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

Así que verifiqué si Docker se estaba ejecutando:

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

Esto sugiere que el demonio Docker ya se está ejecutando, pero para estar seguro, acabo de iniciar el demonio 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

Luego intenté ejecutar la imagen nuevamente, pero con el mismo resultado:

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

Intenté sudo'ing el comando, pero fue en vano. ¿Qué estoy haciendo mal aquí?

kramer65
fuente
1
el mismo problema. También estoy en Ubuntu 15.10 :(
Daniel Loureiro
1
mismo problema, ubuntu 15.10
Lucas Tettamanti
1
Simplemente reinicie su servicio de docker, eso es todo. Gracias @jim <pre> sudo service docker restart </pre>
Nasruddin
1
Nasruddin, eso NO funcionó para mí ... :-(
Rafael_Espericueta
1
Tuve que reiniciar la máquina para que funcione.
romaroma

Respuestas:

443

Debe agregar su usuario actual al grupo de acopladores de la siguiente manera:

sudo usermod -aG docker $(whoami)

luego cierre sesión e inicie sesión nuevamente en el sistema o reinicie el sistema. prueba pordocker version

Para obtener más información sobre cómo instalar Docker-Engine, siga la documentación de Docker

Zubair Alam
fuente
tonto, pero también funcionó para mí @RobinLoxley, esta debería ser una respuesta real no solo un comentario, avíseme si lo publica, le daré un
voto positivo
99
Subrayaría "cerrar sesión y volver a iniciar sesión en el sistema o reiniciar el sistema"
Michele
3
La respuesta de @Junaid a continuación muestra cómo evitar el paso de cierre de sesión / inicio de sesión, en caso de que, como yo, sea tan flojo que no desee reiniciar sus aplicaciones;)
brandizzi
Esto es exactamente lo que se menciona en el tutorial de Docker, pero cerrar sesión y volver a iniciarla no funcionó para mí. Tuve que reiniciar el sistema para que funcione.
aalaap
44
Veo información de la versión de Docker, pero al final de la salida, veoCannot connect to the Docker daemon. Is the docker daemon running on this host?
ghanbari
137

Agregue el usuario al grupo acoplable

  • Agregue el grupo acoplable si aún no existe:

    sudo groupadd docker

  • Agregue el usuario conectado "$ {USER}" al grupo acoplable:

    sudo gpasswd -a ${USER} docker

  • Reinicia el demonio Docker:

    sudo service docker restart

  • Haga una newgrp dockero cierre sesión / inicie sesión para activar los cambios en los grupos.

neo
fuente
1
Parece que newgrp dockeres local para el shell, no la sesión de inicio de sesión. Esto no está del todo claro en la página del manual.
Bergey
1
Trabajó para mi. ¡Gracias!
Apokai
¡La única respuesta que funcionó! En una máquina Linux privada en la nube, ¡y todavía funcionó!
Meghna Natraj
Trabajado en Ubuntu 18.04! Gracias
Kshitij Saraogi
33

Por lo general, el siguiente comando hace el truco:

sudo service docker restart

Esto, en lugar de docker startpara los casos en los que Docker ya parece estar ejecutándose.

Si eso funciona, como se sugiere y en otra respuesta y sobre este problema de GitHub , si no se ha agregado al grupo de docker, hágalo ejecutando:

sudo usermod -aG docker <your-username> 

Y lo más probable es que estés listo.


En cuanto a que alguien más se encuentre con esto, en la ventana acoplable de algunos sistemas operativos no se inicia inmediatamente después de instalarlo y, como resultado, can't connect to daemon messageaparece lo mismo . En este caso, primero puede verificar que Docker no se esté ejecutando verificando el estado de su servicio de Docker ejecutando:

sudo service docker status

Si la salida se parece a algo así: en docker stop/waitinglugar de docker start/running, process 15378eso, obviamente significa que Docker no está activo. En este caso, asegúrese de comenzar con:

sudo service docker start

Y, como antes, lo más probable es que estés listo para ir.

Dimitris Fasarakis Hilliard
fuente
18

Nota personal: me sale el error del título de la pregunta cuando olvido ejecutar el dockercomando con sudo:

sudo docker run ...

[Ubuntu 15.10]

Martin Vseticka
fuente
12

Tuve el mismo problema y lo que funcionó para mí fue:
Verificar la propiedad de /var/run/docker.sock

ls -l /var/run/docker.sock

Si no eres el propietario, cambia la propiedad con el comando

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

Luego puede seguir adelante e intentar ejecutar los comandos de Docker sin problemas: D

kevthanewversi
fuente
2
Después de agotar todas las otras posibilidades, esto es lo que lo hizo funcionar en Sabayon / Gentoo Linux para mí.
gerrit_hoekstra
Ese archivo es propiedad de rootpero en dockergrupo. El enfoque correcto es asignar su usuario actual al dockergrupo, de acuerdo con la documentación de Docker:sudo groupadd docker && sudo usermod -aG docker $USER
Lucas Bustamante
9

Después de instalar todo e iniciar el servicio, intente cerrar su terminal y ábralo nuevamente, luego intente extraer su imagen

Editar

También tuve este problema nuevamente, si la solución anterior no funciona, pruebe esta solución que es el siguiente comando

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

Consideraciones

Si el comando anterior funciona, probablemente tenga problemas con el acoplador de red, de todos modos esto lo resuelve, para confirmar eso, vea el registro con el comando a continuación

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

Si la salida tiene algo así

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

Realmente tiene problemas de red, sin embargo, aún no sé si la próxima vez que reinicie ( actualización , 2 meses sin problemas nuevamente) su sistema operativo volverá a tener este problema y si es un error o un problema de instalación

My docker version

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
fuente
8

Después de instalar Docker en Ubuntu, ejecuté el siguiente comando:

sudo service docker start

¿Lo has probado?

yushulx
fuente
6

Yo tuve el mismo problema. He estado luchando durante dos días para resolverlo.

Solo funcionó cuando lo hice:

  1. De acuerdo con el Tutorial de Docker , debe agregar la clave Docker si aún no se agregó usando:

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

  2. Luego, asegúrese de otorgarse privilegios de docker a usted mismo usando:

    $ sudo usermod -aG docker $USER

Espero que esto le ayude también.

AmrMohallel
fuente
2
El paso 2 se puede simplificar como:sudo usermod -aG docker $USER
johntellsall
5

ingrese como root ( sudo su) e intente esto:

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

Tengo el mismo problema aquí, y el comando docker solo funcionó ejecutándose como root, y también con esto DOCKER_HOSTvacío

PD: también ten en cuenta que la forma correcta y oficial de instalar en Ubuntu es usar sus repositorios apt (incluso en 15.10), no con esa cosa " wget ".

Daniel Loureiro
fuente
esa cosa "wget" acaba de poner el repositorio de Docker en su fuente apt ... es decir, lo mismo que se le pide que haga manualmente de la "manera correcta y oficial" ....
Alar
1
Me temo que te equivocas, Alar. El método "wget" agregará el repositorio de Docker en su fuente apt, lo cual es bueno, pero también hará muchas otras cosas malas, como establecer un DOCKER_HOST env var, que evitará que Docker se ejecute de fábrica. No es porque ambos métodos agreguen docker al repositorio que ambos sean iguales.
Daniel Loureiro
5

Para OSX :

Después de abrir Docker e iniciar la máquina 'predeterminada' a través de la Terminal de inicio rápido ( https://docs.docker.com/engine/installation/mac/ ), prueba los comandos de Docker y recibe este mensaje "no se puede conectar al Docker Daemon" , resulta que necesitas establecer algunas variables env :

eval "$(docker-machine env default)"

Luego pruébalo docker run hello-worldpara ver si todo es color de rosa.

Danny
fuente
5

Para aquellos que ya intentaron reiniciar su máquina, desarmar la variable de entorno DOCKER_HOST como se indica en la documentación de docker env y todo lo demás solo intente ir con el

sudo service docker restart

Solo esto me funcionó incluso después de reiniciar la máquina.

Sr. Moe
fuente
2
Esto es necesario si solo cierra sesión y se conecta.
Zhang LongQI
4

Dar acceso no root - desde ventana acoplable

Agregue el grupo acoplable si aún no existe.

$ sudo groupadd docker

Agregue el usuario conectado "$ {USER}" al grupo de acopladores.

Cambie el nombre de usuario para que coincida con su usuario preferido.

Puede que tenga que cerrar sesión y volver a iniciarla para que esto surta efecto.

$ sudo gpasswd -a ${USER} docker

Reinicia el demonio Docker.

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

Esta pregunta es actualmente el número 3 en una búsqueda de Google. Después de investigar un poco para resolver este problema en mi sistema Linux, pensé en escribir esta respuesta. La publicación original indica que el problema está en Ubuntu, pero también experimenté el problema usando Fedora. Con eso en mente, esto es lo que hice para solucionar el problema.

En Fedora 22

Instalación de Docker:

$> curl -fsSL https://get.docker.com/ | sh

Después de instalar Docker:

Se debe agregar un usuario al grupo acoplable.

$> sudo usermod -aG docker

El Docker Daemon necesita ser iniciado

$> sudo service docker start

Puedes configurar el demonio para que comience en el arranque

$> sudo chkconfig docker on

Puede verificar que el servicio Docker se esté ejecutando

$> service docker status

Y un último cheque final

$> docker run hello-world
Ronald Weidner
fuente
En Fedora 23, este grupo puede ser llamado dockerroot. Además, probablemente desee instalarlo desde el repositorio (en lugar de curl ... | sh) para que pueda actualizarse más tarde:dnf install docker
basic6
muchos no tienen un "acoplador" grupal, por lo que debemos agregarlo primero groupadd dockery luego agregarlo a su nombre de usuariosudo usermod -aG docker your_username
TonyTony
2

Intente usar "sudo" con el comando que está ejecutando.

usuario3737461
fuente
"Intenté sudo el comando, pero fue en vano. ¿Alguien sabe qué estoy haciendo mal aquí? ¡Todos los consejos son bienvenidos!"
RhinoDevel
2

Tengo el mismo problema al ejecutar Docker.

puedes ejecutar comandos como sudo user:

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

Para Ubuntu:
sucedió conmigo cuando actualicé docker.
Debe desenmascarar el servicio y el socket y luego reiniciar el servicio.

Lo siguiente funcionó para mí:

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

Lo que sucedió detrás de escena
systemd también tiene la capacidad de marcar una unidad como completamente inestable, automática o manualmente, vinculándola a / dev / null. Esto se llama enmascarar la unidad y es posible con el comando de máscara.

sudo systemctl mask docker.service

Puede consultar la lista de servicios enmascarados utilizando:

sudo systemctl list-unit-files

Salida de sudo systemctl list-unit-files

Para habilitar el inicio automático / manual del servicio, debe desenmascararlo con:

sudo sytemctl unmask docker.service

Ahora el servicio se habilitará como se muestra a continuación ingrese la descripción de la imagen aquí

lordzuko
fuente
1

A medida que Docker se une a un socket Unix que es propiedad de root mientras se inicia, el uso de 'sudo' junto con los comandos de Docker funcionará.

raja
fuente
1
  1. También tuve el mismo problema. El problema estaba en los sockets asignados a docker-daemon y docker-client.
  2. Primero, no se configuró el permiso para el docker-client en docker.sock. Puede configurarlo usando "sudo usermod -aG docker $ USER"
  3. Luego verifique su archivo bash donde se está ejecutando el docker-client, para mí estaba en 0.0.0.0:2375, mientras que docker-daemon se estaba ejecutando en el socket Unix (se configuró en el archivo de configuración de dockerd).
  4. Solo comente la línea bash y funcionará bien.
  5. Pero si desea que funcione en el puerto TCP en lugar del socket Unix, cambie el archivo de configuración de dockerd y configúrelo en 0.0.0.0.2375 y mantenga la línea en bash como está si está presente o configúrelo en 0.0.0.0: 2375.
Nilesh Kande
fuente
1

Tal vez esto ayude a alguien, ya que el mensaje de error es extremadamente inútil, y he seguido todos los pasos de permiso estándar en numerosas ocasiones sin resultado.

Docker ocasionalmente deja variables de entorno fantasma en su lugar que bloquean el acceso, a pesar de que su sistema esté configurado correctamente. Los siguientes comandos de shell pueden hacer que sea accesible nuevamente, si lo ha ejecutado en un punto y simplemente dejó de cooperar después de un reinicio:

unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps

Tenía una instalación de Docker que funcionaba anteriormente, y después de reiniciar mi computadora portátil, simplemente se negó a funcionar. Fue añadido correctamente al grupo de usuarios estibador, tenía los permisos correctos en el zócalo, etc, pero todavía no podía correr docker login, docker run ...etc. Esto fija para mí. Lamentablemente, tengo que ejecutar esto en cada reinicio. Esto se menciona en un par de problemas de github también como una solución alternativa, aunque parece un error que esta sea una barrera persistente para el correcto funcionamiento de Docker (nota: estoy en Arch Linux, no en OSX, pero este fue el mismo problema para yo).

mopsyd
fuente
1

Probado en 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
fuente
0

Me he enfrentado al mismo error en la instancia de Amazon EC2. El problema se solucionó después de reiniciar la instancia.

Sumit Bhoyar
fuente
0

Agregar usuario actual al grupo acoplable:

sudo usermod -aG docker $(whoami)

POTULA BALAJI
fuente
¡Formatee esto como código! Y explica este comando. Y use las --versiones largas (comenzando con ) de las opciones.
buhtz
0

Para Ubuntu 16.04

/lib/systemd/system/docker.serviceCambio de archivo interno :

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

con:

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

/etc/init.d/dockerCambio de archivo interno :

DOCKER_OPTS=

con:

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

y luego reinicie su computadora.

usuario6646280
fuente