Cómo solucionar los errores «No se puede conectar con el demonio 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, docker comandos como docker ps, docker runy docker build mostrará un mensaje de error similar a este:

$ docker run hello-world:latest
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
Is the docker daemon running?

Esto revela que la CLI intentó comunicarse con el demonio Docker usando el /var/run/docker.sock Zócalo de Unix. 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 docker
docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: inactive (dead)

El servicio debe informar Active: active (running) si el demonio se está ejecutando. El ejemplo anterior muestra inactive (dead) lo que significa que el daemon se ha detenido.

Inicie Docker con el siguiente comando:

$ sudo systemctl start docker

Ahora deberías poder ejecutar docker Comandos CLI 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 enable docker
$ sudo systemctl daemon-reload

los daemon-reload El comando 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 utilizando el dockerd dominio. Por lo general, esto debe ejecutarse como root.

$ sudo dockerd
INFO[2022-06-29T15:12:49.303428726+01:00] Starting up

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 run hello-world:latest
Cannot connect to the Docker daemon at tcp:///0.0.0.0:2375

En este ejemplo, el docker CLI está intentando ponerse en contacto con el demonio de Docker en 0.0.0.0:2375 usando 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:

$ docker context use default

Puede enumerar todos los contextos disponibles y los puntos finales del daemon a los que se conectan con el context ls dominio:

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   unix:///var/run/docker.sock

El contexto seleccionado actualmente se resalta con un asterisco.

Valores inesperados en el DOCKER ENDPOINT columna generalmente son causadas por la DOCKER_HOST variable de entorno que se establece. Verá una advertencia cuando este sea el caso:

$ export DOCKER_HOST=1.2.3.4
$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT
default *   Current DOCKER_HOST based configuration   tcp://1.2.3.4:2375
Warning: DOCKER_HOST environment variable overrides the active context. To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.

la presencia de la DOCKER_HOST La variable de entorno en su shell anula el punto final definido por su contexto seleccionado. En este ejemplo, docker los comandos siempre apuntarán a la instancia del daemon en tcp://1.2.3.4:2375.

Este problema se puede resolver borrando el DOCKER_HOST variable:

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

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   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 run hello-world:latest
Got permission denied while trying to connect to the Docker daemon socket at 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. Agregarte a ti mismo a la docker group es la forma de mejores prácticas para resolver este problema:

$ sudo usermod -aG docker $USER

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 docker comandos 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.





Source link-39