El usuario original interpretó el fallo como «Docker no puede instalar una imagen después de una reinstalación limpia», pero la salida de la terminal mostraba en realidad dos problemas distintos. Ejecutar el docker info sin permisos elevados falló al acceder al socket de Docker, mientras que ejecutar el contenedor de Mosquitto con privilegios de Docker descargó correctamente eclipse-mosquitto:latest. Luego, el contenedor falló por otro motivo: el montaje bind intentó tratar una ruta del host y una ruta del contenedor como tipos incompatibles de archivo/directorio.
Esta distinción es fundamental. Reinstalar Debian, CasaOS o Docker no solucionará un montaje bind que apunta al tipo incorrecto de objeto del sistema de archivos.
Problema 1: El usuario normal no podía acceder al socket de Docker
El primer docker info la salida indicaba:
se denegó el permiso al intentar conectarse al socket del demonio de Docker
unix:///var/run/docker.sock
Eso significa que el usuario de la shell no tenía permiso para comunicarse directamente con el demonio de Docker. El mismo comando funcionó con sudo, lo que demuestra que se podía acceder al demonio.
Esto es independiente del error posterior de inicio de Mosquitto.
La imagen de Mosquitto se descargó correctamente
Docker informó:
Estado: se descargó una imagen más reciente para eclipse-mosquitto:latest
Por lo tanto, el registro, el nombre de la imagen y la conexión a Internet no eran el problema inmediato. El fallo ocurrió únicamente cuando Docker intentó crear el sistema de archivos del contenedor y aplicar el montaje bind.
El error real fue un montaje de archivo frente a directorio
El comando intentó asignar:
/etc/mosquitto/mosquitto.conf
→ /mosquitto/config/mosquitto.conf
Docker informó entonces:
no un directorio
¿Estás intentando montar un directorio en un archivo (o viceversa)?
Ese mensaje debe tomarse literalmente. Uno de los lados de la asignación no tenía el tipo que esperaba el comando.
Por qué -v puede crear automáticamente el tipo incorrecto
La documentación actual de Docker explica una trampa común con -v/--volume: si la ruta de origen no existe, Docker la crea automáticamente como un directorio.
Por lo tanto, si /etc/mosquitto/mosquitto.conf no existiera ya como un archivo real, Docker podría crear un directorio llamado mosquitto.confMontar ese directorio en el archivo de configuración esperado por el contenedor produce exactamente el error observado en el hilo original.
Usa el comportamiento actual de los montajes bind de Docker para verificar si el origen es un archivo o un directorio antes de iniciar el contenedor.
La comunidad pasó a asignar directorios de Mosquitto
Un usuario que respondió compartió una definición de Compose que asignaba tres directorios persistentes:
- → directorio de configuración del host
/mosquitto/config - → directorio de datos del host
/mosquitto/data - → directorio de registros del host
/mosquitto/log
Esto evita el montaje frágil de un “único archivo que quizá aún no exista” y proporciona a Mosquitto una estructura persistente normal.
El archivo de configuración aún debe existir dentro del directorio de configuración
Asignar el directorio no crea automáticamente una configuración válida de Mosquitto. El usuario que respondió indicó que debía colocar mosquitto.conf directorio de configuración asignado antes de iniciar el agente.
Para una implementación nueva, crea primero la configuración como un archivo real y luego monta su directorio principal, o usa el --mount sintaxis, que falla en lugar de crear silenciosamente un directorio de origen inexistente.
La instalación personalizada de CasaOS puede expresar la misma estructura sin un comando docker run sin formato
La comunidad guio al usuario para importar una definición de Compose mediante el flujo de trabajo de aplicaciones personalizadas de CasaOS. Posteriormente, el usuario instaló un paquete de Mosquitto desde una tienda de aplicaciones comunitaria e informó de que funcionaba de inmediato.
Ese resultado confirma que el propio host de Docker podía ejecutar Mosquitto; el problema anterior era de configuración, no una reinstalación fallida de CasaOS.
Un agente en ejecución aún necesita autenticación MQTT y configuración del listener
El usuario de origen preguntó entonces por qué Node-RED no se conectaba y si Mosquitto usaría automáticamente el nombre de usuario y la contraseña del terminal. No lo hace. La autenticación MQTT se configura en el propio Mosquitto mediante sus archivos de configuración y contraseñas.
No des por sentado que un estado verde del contenedor significa que el agente está listo para clientes sin autenticación.
La zona horaria fue el último detalle de configuración del contenedor
Después de instalar un paquete comunitario funcional, el usuario aún tuvo que añadir el valor de entorno de zona horaria adecuado. Se trata de un detalle de la aplicación/entorno de ejecución, no de una prueba de otro fallo de instalación de Docker.
Preguntas frecuentes sobre errores de Mosquitto en Docker
¿Docker no pudo descargar eclipse-mosquitto?
No. La salida de origen muestra que la imagen se descargó correctamente.
¿Por qué no se pudo iniciar el contenedor?
El montaje vinculado tenía una discrepancia entre archivo y directorio en mosquitto.conf.
¿Por qué un archivo del host inexistente puede convertirse en un directorio con docker -v?
de Docker --volume este comportamiento crea una fuente del host inexistente como directorio, lo que puede romper un montaje vinculado de archivo a archivo.
¿Reinstalar CasaOS solucionó el problema?
No. El usuario finalmente lo consiguió después de usar una configuración correcta de la aplicación/contenedor.
