{"id":90245,"date":"2022-08-12T10:11:08","date_gmt":"2022-08-12T10:11:08","guid":{"rendered":"https:\/\/magazineoffice.com\/como-solucionar-los-errores-no-se-puede-conectar-con-el-demonio-docker\/"},"modified":"2022-08-12T10:11:09","modified_gmt":"2022-08-12T10:11:09","slug":"como-solucionar-los-errores-no-se-puede-conectar-con-el-demonio-docker","status":"publish","type":"post","link":"https:\/\/magazineoffice.com\/como-solucionar-los-errores-no-se-puede-conectar-con-el-demonio-docker\/","title":{"rendered":"C\u00f3mo solucionar los errores \u00abNo se puede conectar con el demonio Docker\u00bb"},"content":{"rendered":"


\n<\/p>\n

\n

Docker es una de las plataformas l\u00edderes para crear y ejecutar contenedores de software. Viene con todo lo que necesita para usar contenedores en un solo host o en m\u00faltiples nodos distribuidos en modo Swarm.<\/p>\n

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\u00e1 errores en la CLI si intenta ejecutar comandos sin una conexi\u00f3n de daemon activa. En este art\u00edculo, compartiremos algunos m\u00e9todos para solucionar estos mensajes frustrantes.<\/p>\n

S\u00edntomas del problema<\/h2>\n

La CLI de Docker depende de la disponibilidad de una conexi\u00f3n daemon. Interact\u00faa con el daemon mediante llamadas a la API. Cuando el demonio configurado es inaccesible, docker<\/code> comandos como docker ps<\/code>, docker run<\/code>y docker build<\/code> mostrar\u00e1 un mensaje de error similar a este:<\/p>\n

$ docker run hello-world:latest
\nCannot connect to the Docker daemon at unix:\/\/\/var\/run\/docker.sock
\nIs the docker daemon running?<\/pre>\n

Esto revela que la CLI intent\u00f3 comunicarse con el demonio Docker usando el \/var\/run\/docker.sock<\/code> Z\u00f3calo de Unix. El enchufe no est\u00e1 abierto, por lo que la conexi\u00f3n fall\u00f3.<\/p>\n

1. Verifique que el servicio Docker Daemon se est\u00e9 ejecutando<\/h2>\n

El demonio de Docker generalmente es administrado por un servicio systemd que inicia autom\u00e1ticamente Docker despu\u00e9s de que su host se reinicia. Puede comenzar a solucionar problemas comprobando si este servicio se est\u00e1 ejecutando:<\/p>\n

$ sudo systemctl status docker
\ndocker.service - Docker Application Container Engine
\n     Loaded: loaded (\/lib\/systemd\/system\/docker.service; enabled; vendor preset: enabled)
\n     Active: inactive (dead)<\/pre>\n

El servicio debe informar Active: active (running)<\/code> si el demonio se est\u00e1 ejecutando. El ejemplo anterior muestra inactive (dead)<\/code> lo que significa que el daemon se ha detenido.<\/p>\n

Inicie Docker con el siguiente comando:<\/p>\n

$ sudo systemctl start docker<\/pre>\n

Ahora deber\u00edas poder ejecutar docker<\/code> Comandos CLI con \u00e9xito.<\/p>\n

Es posible que Docker permanezca en el estado detenido despu\u00e9s de reiniciar su m\u00e1quina. Puede resolver esto habilitando el servicio, permitiendo que systemd lo inicie autom\u00e1ticamente:<\/p>\n

$ sudo systemctl enable docker
\n$ sudo systemctl daemon-reload<\/pre>\n

los daemon-reload<\/code> El comando indica a systemd que vuelva a cargar su configuraci\u00f3n para aplicar el cambio.<\/p>\n

2. Inicie el demonio manualmente<\/h2>\n

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<\/code> dominio. Por lo general, esto debe ejecutarse como root<\/code>.<\/p>\n

$ sudo dockerd
\nINFO[2022-06-29T15:12:49.303428726+01:00] Starting up<\/pre>\n

Docker permanecer\u00e1 accesible mientras se ejecute el comando. Use Ctrl+C para detener el demonio.<\/p>\n

3. Comprobaci\u00f3n de que la CLI est\u00e1 apuntando al daemon correcto<\/h2>\n

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\u00f3n TCP:<\/p>\n

$ docker run hello-world:latest
\nCannot connect to the Docker daemon at tcp:\/\/\/0.0.0.0:2375<\/pre>\n

En este ejemplo, el docker<\/code> CLI est\u00e1 intentando ponerse en contacto con el demonio de Docker en 0.0.0.0:2375<\/code> usando TCP, en lugar del socket local de Unix Docker. Esto fallar\u00e1 si la compatibilidad con TCP del demonio Docker est\u00e1 deshabilitada o si no se puede acceder al host especificado en la red.<\/p>\n

Por lo general, puede resolver esto cambiando al contexto correcto de la CLI de Docker para la conexi\u00f3n de daemon que desea usar:<\/p>\n

$ docker context use default<\/pre>\n

Puede enumerar todos los contextos disponibles y los puntos finales del daemon a los que se conectan con el context ls<\/code> dominio:<\/p>\n

$ docker context ls
\nNAME        DESCRIPTION                               DOCKER ENDPOINT             
\ndefault *   Current DOCKER_HOST based configuration   unix:\/\/\/var\/run\/docker.sock<\/pre>\n

El contexto seleccionado actualmente se resalta con un asterisco.<\/p>\n

Valores inesperados en el DOCKER ENDPOINT<\/code> columna generalmente son causadas por la DOCKER_HOST<\/code> variable de entorno que se establece. Ver\u00e1 una advertencia cuando este sea el caso:<\/p>\n

$ export DOCKER_HOST=1.2.3.4
\n$ docker context ls
\nNAME        DESCRIPTION                               DOCKER ENDPOINT
\ndefault *   Current DOCKER_HOST based configuration   tcp:\/\/1.2.3.4:2375
\nWarning: DOCKER_HOST environment variable overrides the active context. To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.<\/pre>\n

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

Este problema se puede resolver borrando el DOCKER_HOST<\/code> variable:<\/p>\n

$ export DOCKER_HOST=<\/pre>\n

Docker ahora usar\u00e1 el punto final configurado por su contexto activo. Este ser\u00e1 el socket Unix local predeterminado en \/var\/run\/docker.sock<\/code> a menos que haya configurado manualmente un contexto personalizado.<\/p>\n

$ docker context ls
\nNAME        DESCRIPTION                               DOCKER ENDPOINT             
\ndefault *   Current DOCKER_HOST based configuration   unix:\/\/\/var\/run\/docker.sock<\/pre>\n

4. Problemas de permisos<\/h2>\n

Los permisos de usuario incorrectos en el socket de Docker son otra causa com\u00fan de problemas de conexi\u00f3n de daemon. Este tipo de problema generalmente muestra un mensaje de error ligeramente diferente:<\/p>\n

$ docker run hello-world:latest
\nGot permission denied while trying to connect to the Docker daemon socket at unix:\/\/\/var\/run\/docker.sock<\/pre>\n

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<\/code> group es la forma de mejores pr\u00e1cticas para resolver este problema:<\/p>\n

$ sudo usermod -aG docker $USER<\/pre>\n

Deber\u00e1 abrir una nueva ventana de shell o cerrar la sesi\u00f3n y volver a iniciarla para que este cambio surta efecto. Ahora deber\u00eda poder ejecutar docker<\/code> comandos sin tener problemas de permisos.<\/p>\n

Resumen<\/h2>\n

\u00abNo se puede conectar con el demonio de Docker\u00bb aparece cuando la CLI de Docker no puede comunicarse con una instancia de demonio de Docker usando su configuraci\u00f3n actual. A menudo, esto se debe a que el servicio del demonio de Docker se ha detenido o deshabilitado. Tambi\u00e9n podr\u00eda estar intentando conectarse a un host Docker remoto que se ha desconectado.<\/p>\n

Ahora debe conocer las posibles causas de este problema y las formas comunes de resolverlo. Solucione el error comprobando la configuraci\u00f3n del demonio de Docker, reiniciando el servicio de Docker y asegur\u00e1ndose de que su cuenta de usuario tenga permiso para interactuar con el socket de Docker.<\/p>\n<\/div>\n