Cómo solucionar los errores "No se puede conectar con el demonio Docker"

Publicado: 2022-08-14

Gráfico que muestra el logotipo de Docker

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