Cómo solucionar los errores "No se puede conectar con el demonio Docker"
Publicado: 2022-08-14Docker es una de las plataformas líderes para crear y ejecutar contenedores de software. Viene con todo lo que necesita para usar contenedores en un solo host o en múltiples nodos distribuidos en modo Swarm.
Docker tiene una arquitectura basada en demonios. El software responsable de crear e iniciar contenedores es independiente del proceso CLI que acepta sus comandos. Esto significa que verá errores en la CLI si intenta ejecutar comandos sin una conexión de daemon activa. En este artículo, compartiremos algunos métodos para solucionar estos mensajes frustrantes.
Síntomas del problema
La CLI de Docker depende de la disponibilidad de una conexión daemon. Interactúa con el daemon mediante llamadas a la API. Cuando el demonio configurado es inaccesible, los comandos docker
como docker ps
, docker run
y docker build
mostrarán un mensaje de error similar a este:
$ docker ejecutar hola-mundo:último No se puede conectar al demonio Docker en unix:///var/run/docker.sock ¿Se está ejecutando el demonio docker?
Esto revela que la CLI intentó comunicarse con el demonio Docker mediante el socket Unix /var/run/docker.sock
. El enchufe no está abierto, por lo que la conexión falló.
1. Verifique que el servicio Docker Daemon se esté ejecutando
El demonio de Docker generalmente es administrado por un servicio systemd que inicia automáticamente Docker después de que su host se reinicia. Puede comenzar a solucionar problemas comprobando si este servicio se está ejecutando:
$ sudo systemctl status ventana acoplable docker.service - Motor de contenedor de aplicaciones de Docker Cargado: cargado (/lib/systemd/system/docker.service; habilitado; proveedor predeterminado: habilitado) Activo: inactivo (muerto)
El servicio debe informar Active: active (running)
si el daemon se está ejecutando. El ejemplo anterior muestra inactive (dead)
, lo que significa que el demonio se ha detenido.
Inicie Docker con el siguiente comando:
$ sudo systemctl iniciar ventana acoplable
Ahora debería poder ejecutar los comandos CLI de la docker
con éxito.
Es posible que Docker permanezca en el estado detenido después de reiniciar su máquina. Puede resolver esto habilitando el servicio, permitiendo que systemd lo inicie automáticamente:
$ sudo systemctl habilitar la ventana acoplable $ sudo systemctl daemon-recargar
El comando daemon-reload
le indica a systemd que vuelva a cargar su configuración para aplicar el cambio.
2. Inicie el demonio manualmente
En ocasiones, es posible que utilice un sistema que no tenga instalado el servicio Docker. Puede iniciar manualmente el demonio de Docker con el comando dockerd
. Por lo general, esto debe ejecutarse como root
.
$ sudo dockerd INFO[2022-06-29T15:12:49.303428726+01:00] Arrancando
Docker permanecerá accesible mientras se ejecute el comando. Use Ctrl+C para detener el demonio.
3. Comprobación de que la CLI está apuntando al daemon correcto
Pueden ocurrir problemas cuando la CLI intenta conectarse a una instancia remota del demonio de Docker. Esta suele ser la causa cuando el mensaje de error muestra una dirección TCP:
$ docker ejecutar hola-mundo:último No se puede conectar al demonio Docker en tcp:///0.0.0.0:2375
En este ejemplo, la docker
de Docker intenta comunicarse con el demonio de Docker en 0.0.0.0:2375
mediante TCP, en lugar del socket local de Unix Docker. Esto fallará si la compatibilidad con TCP del demonio Docker está deshabilitada o si no se puede acceder al host especificado en la red.

Por lo general, puede resolver esto cambiando al contexto correcto de la CLI de Docker para la conexión de daemon que desea usar:
$ uso predeterminado del contexto docker
Puede enumerar todos los contextos disponibles y los puntos finales del daemon a los que se conectan con el context ls
:
$ contexto docker ls NOMBRE DESCRIPCIÓN PUNTO FINAL DOCKER predeterminado * Configuración actual basada en DOCKER_HOST unix:///var/run/docker.sock
El contexto seleccionado actualmente se resalta con un asterisco.
Los valores inesperados en la columna DOCKER ENDPOINT
generalmente son causados por la configuración de la variable de entorno DOCKER_HOST
. Verá una advertencia cuando este sea el caso:
$ exportar DOCKER_HOST=1.2.3.4 $ contexto docker ls NOMBRE DESCRIPCIÓN PUNTO FINAL DOCKER predeterminado * Configuración actual basada en DOCKER_HOST tcp://1.2.3.4:2375 Advertencia: la variable de entorno DOCKER_HOST anula el contexto activo. Para usar un contexto, configure el indicador global --context o desactive la variable de entorno DOCKER_HOST.
La presencia de la variable de entorno DOCKER_HOST
en su shell anula el punto final definido por su contexto seleccionado. En este ejemplo, los comandos de la ventana docker
siempre apuntarán a la instancia del demonio en tcp://1.2.3.4:2375
.
Este problema se puede resolver borrando la variable DOCKER_HOST
:
$ exportar DOCKER_HOST=
Docker ahora usará el punto final configurado por su contexto activo. Este será el socket Unix local predeterminado en /var/run/docker.sock
, a menos que haya configurado manualmente un contexto personalizado.
$ contexto docker ls NOMBRE DESCRIPCIÓN PUNTO FINAL DOCKER predeterminado * Configuración actual basada en DOCKER_HOST unix:///var/run/docker.sock
4. Problemas de permisos
Los permisos de usuario incorrectos en el socket de Docker son otra causa común de problemas de conexión de daemon. Este tipo de problema generalmente muestra un mensaje de error ligeramente diferente:
$ docker ejecutar hola-mundo:último Obtuve el permiso denegado al intentar conectarme al socket del demonio Docker en unix:///var/run/docker.sock
Esto sucede cuando su cuenta de usuario de Unix no tiene permiso para interactuar con el socket que expone la API de Docker. Agregarse al grupo docker
es la mejor forma de resolver este problema:
$ sudo usermod -aG docker $USUARIO
Deberá abrir una nueva ventana de shell o cerrar la sesión y volver a iniciarla para que este cambio surta efecto. Ahora debería poder ejecutar los comandos de la docker
sin tener problemas de permisos.
Resumen
"No se puede conectar con el demonio de Docker" aparece cuando la CLI de Docker no puede comunicarse con una instancia de demonio de Docker usando su configuración actual. A menudo, esto se debe a que el servicio del demonio de Docker se ha detenido o deshabilitado. También podría estar intentando conectarse a un host Docker remoto que se ha desconectado.
Ahora debe conocer las posibles causas de este problema y las formas comunes de resolverlo. Solucione el error comprobando la configuración del demonio de Docker, reiniciando el servicio de Docker y asegurándose de que su cuenta de usuario tenga permiso para interactuar con el socket de Docker.