Programa
Configurar un bróker MQTT desde cero no debería llevar horas de configuración y resolución de problemas.
Eclipse Mosquitto es un bróker MQTT de código abierto que implementa los protocolos MQTT v5, 3.1.1 y 3.1, lo que lo hace perfecto para dispositivos IoT, sistemas de automatización del hogar, aplicaciones en la nube y cualquier arquitectura basada en mensajes. Sin embargo, instalar y configurar Mosquitto directamente en tu sistema suele provocar conflictos de dependencias, problemas de permisos y problemas específicos de la plataforma que consumen tu tiempo de desarrollo. Acabas dedicando más tiempo a lidiar con la configuración que a desarrollar tu aplicación.
Docker elimina estos problemas al proporcionar un entorno coherente y aislado para ejecutar Mosquitto en cualquier plataforma. Puedes tener un bróker MQTT totalmente funcional en cuestión de minutos, con configuraciones personalizadas, autenticación y persistencia.
En esta guía, te explicaré cómo implementar Eclipse Mosquitto utilizando Docker y Docker Compose, configurar la autenticación y el registro, configurar la persistencia de datos y probar tu broker con clientes MQTT reales.
¿Eres completamente nuevo en Docker? Recomiendo empezar con nuestra curso Introducción a Docker para comprender los fundamentos.
¿Qué es Mosquitto y por qué utilizarlo en Docker?
No necesitas un sistema de mensajería pesado cuando lo único que quieres es una comunicación rápida y fiable entre dispositivos.
MQTT es un protocolo ligero de publicación-suscripción diseñado para situaciones en las que el ancho de banda es limitado y la fiabilidad es importante. Piensa en sensores IoT, aplicaciones móviles o cualquier escenario en el que los dispositivos necesiten intercambiar pequeños mensajes rápidamente sin necesidad de realizar sondeos constantes.
Mosquitto actúa como intermediario (broker) entre los editores y los suscriptores.
Los editores envían mensajes sobre temas específicos. Los suscriptores escuchan esos temas. Mosquitto se encarga del enrutamiento, asegurando que los mensajes se entreguen en los lugares correctos sin que los editores y suscriptores necesiten conocerse entre sí.
He aquí por qué Docker mejora aún más las configuraciones de Mosquitto Docker:
- Configuración coherente en todas las plataformas: Windows, macOS o Linux: el contenedor Docker funciona exactamente de la misma manera. Sin necesidad de buscar instaladores específicos para cada plataforma ni lidiar con conflictos de dependencias.
- Fácil gestión de versiones: Puedes fijar versiones específicas de Mosquitto utilizando etiquetas de imagen, revertir los cambios si algo falla y probar nuevas versiones sin tocar tu sistema host.
- Verdadera portabilidad: La misma configuración de Docker Mosquitto funciona en desarrollo, staging y producción. Tu entorno local coincide con lo que se está ejecutando en tus servidores.
Mosquitto está disponible en dos versiones: la versión de código abierto (que cubre la mayoría de los casos de uso) y la edición Pro comercial de Cedalo, con funciones avanzadas como la agrupación en clústeres y una seguridad mejorada. Para la mayoría de los proyectos, la versión de código abierto hace todo lo que necesitas.
A continuación, repasaré los requisitos previos y luego nos sumergiremos en la instalación de Mosquitto.
Requisitos previos
Necesitas tener Docker ejecutándose en tu sistema antes de poder implementar Mosquitto.
Docker Desktop funciona mejor para los usuarios de Windows y macOS, ya que incluye todo lo necesario en un solo paquete. Los usuarios de Linux pueden instalar laCLI de Docker directamente a través de vuestro gestor de paquetes o desde el repositorio oficial de Docker.
Docker Compose no es necesario, pero facilita mucho la gestión de configuraciones con varios contenedores. La mayoría de las instalaciones de Docker Desktop incluyen Compose de forma predeterminada. Si utilizas Linux, es posible que tengas que instalarlo por separado.
También necesitarás conocimientos básicos sobre la línea de comandos. Nada sofisticado, solo la capacidad de ejecutar comandos, navegar por directorios y editar archivos de texto.
Configuración paso a paso
Para ejecutar Mosquitto Docker hay que seguir tres pasos: crear directorios, ejecutar el contenedor y, opcionalmente, configurar Docker Compose para facilitar la gestión.
Creación de los directorios necesarios
Mosquitto necesita un almacenamiento organizado para su configuración, datos y registros.
Crea los siguientes para empezar:
mkdir mosquitto-docker
cd mosquitto-docker
mkdir config data logs
Esto te proporciona carpetas organizadas para los archivos de configuración de Mosquitto, los datos persistentes y la salida de registros.
Esto es lo que hace cada directorio:
/mosquitto/configalmacenamosquitto.confy cualquier archivo de configuración adicional/mosquitto/dataAlmacena datos de mensajes persistentes e información de suscripción./mosquitto/logContiene los archivos de registro de Mosquitto para la depuración y supervisión.
Estos directorios se montan como volúmenes dentro del contenedor Docker, por lo que tu configuración y tus datos se conservan tras el reinicio del contenedor.
Ejecutar Mosquitto con Docker
El comando básico de Docker ejecuta Mosquitto con la asignación de puertos y los montajes de volúmenes adecuados.
docker run -d \
--name mosquitto \
-p 1883:1883 \
-v $(pwd)/mosquitto/config:/mosquitto/config \
-v $(pwd)/mosquitto/data:/mosquitto/data \
-v $(pwd)/mosquitto/log:/mosquitto/log \
eclipse-mosquitto:latest

Imagen 1: Ejecución de Mosquitto con Docker
Permíteme analizar esas banderas:
-dejecuta el contenedor en segundo plano (modo separado)--name mosquittoasigna al contenedor un nombre descriptivo para facilitar su identificación.-p 1883:1883asigna el puerto 1883 de tu host al puerto 1883 del contenedor-vmonta directorios locales como volúmenes dentro del contenedor
Mosquitto 2.0+ se ejecuta en modo local por defecto. Esto significa que solo acepta conexiones desde localhost, a menos que lo configures de otra manera. Tendrás que crear un archivo de configuración para permitir las conexiones externas.
Uso de Docker Compose
Mosquitto docker compose simplifica enormemente la gestión de la instalación, especialmente cuando se ejecutan varios servicios.
Crea un archivo docker-compose.yml y pega el siguiente contenido:
services:
mosquitto:
image: eclipse-mosquitto:latest
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883" # MQTT
- "8883:8883" # MQTTS (secure)
- "9001:9001" # WebSockets
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
Empieza con:
docker-compose up -d

Imagen 2: Ejecución de Mosquitto con Docker Compose
Las asignaciones de volumen funcionan de la misma manera que el comando Docker, pero Compose se encarga de la complejidad. La configuración del puerto cubre todos los protocolos MQTT comunes: MQTT estándar (1883), MQTTS seguro (8883) y conexiones WebSocket (9001).
Compose destaca especialmente en configuraciones multiservicio. Por ejemplo, si estás ejecutando Home Assistant, Node-RED u otras herramientas de IoT junto con Mosquitto, puedes definir todo en un solo archivo e iniciar todos los servicios a la vez.
A continuación, profundicemos en la configuración.
¿Te resultan confusos los conceptos más avanzados de Docker? Nuestro curso intermedio de Docker va más allá de los conceptos básicos.
Configuración de Mosquitto
Mosquitto no acepta conexiones externas de forma predeterminada, necesitas un archivo de configuración para hacerlo.
Configuración básica (mosquitto.conf)
Crea un archivo mosquitto.conf en tu directorio mosquitto/config y añade lo siguiente:
# Basic listener configuration
listener 1883
allow_anonymous true
# WebSocket listener
listener 9001
protocol websockets
allow_anonymous true
# Persistence
persistence true
persistence_location /mosquitto/data/
# Logging
log_dest file /mosquitto/log/mosquitto.log
log_type error
log_type warning
log_type notice
log_type information
La configuración ` allow_anonymous true ` permite a los clientes conectarse sin credenciales. Esto funciona bien para redes de desarrollo o internas, pero es recomendable desactivarlo para entornos de producción. Cuando configuras allow_anonymous false, todos los clientes deben autenticarse con un nombre de usuario y una contraseña.
El listener WebSocket en el puerto 9001 habilita los clientes MQTT basados en navegador. Las aplicaciones web pueden conectarse directamente a tu bróker utilizando bibliotecas JavaScript como Paho MQTT.
Configuración de la autenticación
La autenticación requiere crear un archivo de contraseñas y actualizar tu configuración.
Genera un archivo de contraseñas dentro del contenedor:
docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/passwd username

Imagen 3: autenticación de Mosquitto
Esto crea un nuevo archivo de contraseñas y te solicita que introduzcas una contraseña. Para usuarios adicionales, elimina la bandera -c:
docker exec -it mosquitto mosquitto_passwd /mosquitto/config/passwd another_user
Ahora, actualiza tu mosquitto.conf para forzar la autenticación:
# Disable anonymous access
allow_anonymous false
# Point to password file
password_file /mosquitto/config/passwd
# Basic MQTT listener
listener 1883
# WebSocket listener
listener 9001
protocol websockets
# Persistence
persistence true
persistence_location /mosquitto/data/
# Logging
log_dest file /mosquitto/log/mosquitto.log
log_type error
log_type warning
log_type notice
log_type information
El archivo de contraseñas se almacena en tu volumen de configuración montado, por lo que se mantiene entre reinicios del contenedor.
Habilitar TLS/SSL
El cifrado TLS protege tu tráfico MQTT contra el espionaje y la manipulación.
Añade estas líneas a tu archivo mosquitto.conf:
# Secure MQTT listener
listener 8883
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key
# Secure WebSocket listener
listener 9002
protocol websockets
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key
Tendrás que obtener certificados SSL para tu dominio. Let's Encrypt proporciona certificados gratuitos, o puedes utilizar proxies inversos como Caddy Server, que se encargan de generar los certificados automáticamente. Coloca tus archivos de certificado en el directorio mosquitto/config para que estén disponibles dentro del contenedor.
Persistencia y registro
La persistencia guarda los mensajes y las suscripciones en el disco, mientras que un registro adecuado te ayuda a depurar los problemas de conexión.
Puedes configurar la persistencia en mosquitto.conf de esta manera:
# Enable persistence
persistence true
persistence_location /mosquitto/data/
# Save to disk every 300 seconds
autosave_interval 300
# Keep messages for offline clients
persistent_client_expiration 1d
En cuanto al registro, así es como puedes configurar un registro detallado:
# Log to file and stdout
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
# Choose what to log
log_type error
log_type warning
log_type notice
log_type information
log_type debug
# Log connection details
connection_messages true
log_timestamp true
Las opciones log_type te permiten filtrar lo que se registra:
errorywarningpara la supervisión de la producción.noticeyinformationpara obtener información general sobre el funcionamiento.debugpara solucionar problemas de conexión
Tus montajes de volumen garantizan que tanto los datos persistentes como los registros sobrevivan al reinicio de los contenedores. El directorio de datos almacena todos los mensajes persistentes y la información de suscripción, mientras que el directorio de registros mantiene tu información de depuración accesible desde el sistema host.
Los archivos de configuración te permiten controlar por completo el comportamiento de Mosquitto sin necesidad de reconstruir contenedores.
Probando la configuración
Tu agente no será útil hasta que verifiques que los clientes pueden conectarse e intercambiar mensajes.
Uso de mosquitto_pub y mosquitto_sub
Las herramientas de línea de comandos mosquitto_pub y mosquitto_sub proporcionan la forma más rápida de probar tu agente.
Comienza instalando Mosquitto, dependiendo de tu plataforma:
- Linux (Ubuntu/Debian):
sudo apt-get install mosquitto-clients - macOS:
brew install mosquitto - Ventanas: Descárgalo desde el sitio web oficial de Eclipse Mosquitto o utiliza WSL.
Empecemos a probarlo sin autenticación. Necesitarás dos ventanas o pestañas de terminal. Ejecuta estos comandos en sesiones separadas:
# Subscribe to a topic (run this first)
mosquitto_sub -h localhost -p 1883 -t test/topic
# Publish a message (run in another terminal)
mosquitto_pub -h localhost -p 1883 -t test/topic -m "Hello MQTT"
En la pestaña «Publicar», verás lo siguiente:

Imagen 4: Publicación de un mensaje
Y en la pestaña «Suscribirse», verás inmediatamente el mensaje:

Imagen 5: Suscripción a un tema de Mosquitto
Si necesitas autenticación, los comandos son muy similares: solo tendrás que introducir el nombre de usuario y la contraseña:
# Subscribe with username and password
mosquitto_sub -h localhost -p 1883 -t test/topic -u username -P password
# Publish with credentials
mosquitto_pub -h localhost -p 1883 -t test/topic -m "Authenticated message" -u username -P password
Si no deseas instalar los clientes Mosquitto localmente, ejecútalos dentro de tu contenedor Docker:
# Subscribe using the container
docker exec -it mosquitto mosquitto_sub -h localhost -t test/topic
# Publish using the container
docker exec -it mosquitto mosquitto_pub -h localhost -t test/topic -m "Container message"
Verás esto en la pestaña de publicación:

Imagen 6: Publicación de un mensaje sin autenticación
Y en la pestaña «Suscribirse», aparecerá el siguiente mensaje:

Imagen 7: Suscripción a un tema de Mosquitto sin autenticación
Pruebas con clientes MQTT
Los clientes GUI facilitan la comprobación de escenarios complejos y la supervisión del tráfico de mensajes en curso.
MQTT Explorer ofrece una interfaz limpia para explorar temas y enviar mensajes. Conéctate a localhost:1883 y verás una vista en árbol de todos los temas activos. Es perfecto para depurar flujos de mensajes y comprender la estructura de tus temas.

Imagen 8: aplicación MQTT Explorer
MQTTX ofrece funciones más avanzadas, como la creación de scripts y el envío masivo de mensajes. Ambos clientes admiten autenticación, conexiones TLS y protocolos WebSocket.
Los usuarios de Home Assistant pueden probar la integración MQTT directamente desde las herramientas para programadores. Añade los datos de tu bróker a la integración MQTT y utiliza la interfaz integrada de publicación/suscripción.
Para las pruebas programáticas, el cliente Paho MQTT Python funciona bien:
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
client.subscribe("test/topic")
def on_message(client, userdata, msg):
print(f"Received: {msg.payload.decode()}")
client = mqtt.Client()
# client.username_pw_set("username", "password") # If using auth
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.loop_forever()
Ejecuta este script en un terminal y, a continuación, publica mensajes desde otro terminal o cliente GUI. El script imprimirá cualquier mensaje que reciba, confirmando que tu agente está enrutando el tráfico correctamente.
Esto es lo que debes hacer para publicar un mensaje:

Imagen 9: Publicación de un mensaje para el ejemplo de Python.
Y verás esto en la sesión de terminal en la que se ejecuta el script de Python:

Imagen 10: recepción de un mensaje para el ejemplo de Python.
Las operaciones de publicación y suscripción en funcionamiento significan que tu configuración de Mosquitto Docker está lista para aplicaciones reales.
Integración de Mosquitto Docker con Home Assistant
Ejecutar Mosquitto junto con Home Assistant en Docker crea un centro de mensajería IoT completo sin complicaciones de configuración de red.
Docker Compose lo hace muy sencillo. Ambos servicios pueden comunicarse a través de la red interna de Docker sin exponer puertos adicionales ni tener que lidiar con direcciones IP.
Aquí tienes un archivo docker-compose.yml completo que ejecuta ambos servicios:
services:
mosquitto:
image: eclipse-mosquitto:latest
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
networks:
- homeassistant
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
restart: unless-stopped
ports:
- "8123:8123"
volumes:
- ./homeassistant:/config
- /etc/localtime:/etc/localtime:ro
networks:
- homeassistant
depends_on:
- mosquitto
networks:
homeassistant:
driver: bridge
La sección « networks » crea una red compartida en la que ambos contenedores pueden comunicarse entre sí por su nombre. Home Assistant puede conectarse a mosquitto:1883 en lugar de utilizar localhost o direcciones IP.
Inicia ambos servicios con:
docker-compose up -d
A continuación, configura la integración MQTT a través de la interfaz web de Home Assistant. Ve a Configuración > Dispositivos y servicios > Añadir integración y, a continuación, busca «MQTT».
Introduce estos datos de conexión:
- Corredor:
mosquitto(el nombre del contenedor) - Puerto:
1883 - Nombre de usuario/Contraseña: Tus credenciales si la autenticación está habilitada.
- Mantén el resto de ajustes como predeterminados.
Haz clic en Enviar y Home Assistant comprobará la conexión. Si todo va bien, verás aparecer MQTT en tu lista de integraciones.

Imagen 11: configuración de Mosquitto con Homelab.
Ahora puedes añadir dispositivos MQTT, crear automatizaciones que publiquen mensajes y supervisar los datos de los sensores a través de temas. La integración MQTT de Home Assistant gestiona automáticamente la detección de dispositivos compatibles.
Solución de problemas comunes
La mayoría de los problemas de Docker Mosquitto se reducen a permisos, puertos o errores de configuración que bloquean las conexiones.
Errores de permisos con volúmenes montados
Esto ocurre cuando el contenedor no puede escribir en los directorios del host. Verás mensajes de error como «Permiso denegado» o «No se puede crear el directorio» en los registros.
Soluciona este problema estableciendo la propiedad adecuada en tus directorios:
sudo chown -R 1883:1883 mosquitto/
El contenedor Mosquitto se ejecuta con el ID de usuario 1883, por lo que tus directorios de host deben coincidir. En algunos sistemas, es posible que tengas que crear primero el usuario:
sudo useradd -u 1883 mosquitto
sudo chown -R mosquitto:mosquitto mosquitto/
Conflictos de puertos
Esto ocurre cuando otra cosa está utilizando el puerto 1883. Comprueba qué se está ejecutando en ese puerto:
# Linux/macOS
sudo lsof -i :1883
# Windows
netstat -an | findstr :1883
Si otro servicio está utilizando el puerto, deténlo o asigna Mosquitto a un puerto diferente:
docker run -p 1884:1883 eclipse-mosquitto:latest
El modo solo local impide las conexiones externas.
Esto ocurre incluso cuando tu contenedor está en funcionamiento. Mosquitto 2.0+ acepta por defecto solo conexiones desde localhost, a menos que lo configures de otra manera.
Crea un archivo básico mosquitto.conf para permitir conexiones externas:
listener 1883
allow_anonymous true
Coloca este archivo en tu directorio mosquitto/config y reinicia el contenedor.
Directorios vacíos al iniciar
Esto significa que tus montajes de volumen no funcionan correctamente. Comprueba que las rutas sean absolutas y que los directorios existan:
# Wrong - relative path might not work
-v ./mosquitto/config:/mosquitto/config
# Better - absolute path
-v $(pwd)/mosquitto/config:/mosquitto/config
Crea los directorios antes de iniciar el contenedor:
mkdir -p mosquitto/{config,data,log}
UID/GID conflictivos entre el host y el contenedor
Esto provocará problemas persistentes con los permisos. El contenedor espera ejecutarse como usuario 1883, pero tu sistema host puede tener requisitos de propiedad diferentes.
Obliga al contenedor a ejecutarse como tu usuario:
docker run --user $(id -u):$(id -g) eclipse-mosquitto:latest
O bien, ajusta los permisos del directorio host para que coincidan con las expectativas del contenedor. El enfoque basado en contenedores funciona mejor para el desarrollo, mientras que la corrección de los permisos del host funciona mejor para las implementaciones en producción.
Comprueba los registros del contenedor cuando algo no funcione; normalmente te indican exactamente cuál es el problema.
Avanzado: Características de Mosquitto Pro Edition
El Mosquitto de código abierto cubre la mayoría de los casos de uso, pero los entornos empresariales necesitan funciones que solo ofrece la edición Pro.
La gestión de usuarios basada en roles te permite definir permisos granulares para diferentes grupos de usuarios. En lugar de gestionar el acceso de usuarios individuales, creas roles como «lectores de sensores», «controladores de actuadores» o «usuarios administradores» y asignas permisos a roles completos. Los usuarios heredan los permisos de los roles que se les asignan, lo que facilita la gestión del acceso en cientos o miles de dispositivos.
Puedes restringir el acceso por patrones temáticos, rangos de IP o ventanas de tiempo. Esto es mejor que configurar manualmente los archivos ACL cuando gestionas implementaciones complejas de IoT con diferentes requisitos de seguridad.
Las opciones de autenticación avanzada van más allá de las simples combinaciones de nombre de usuario y contraseña. La autenticación mediante tokens JWT se integra con proveedores de identidad existentes como Auth0, Okta o el sistema SSO de tu empresa. La integración LDAP se conecta directamente a Active Directory u otros servicios de directorio empresarial.
La inspección y supervisión profundas te proporcionan visibilidad en tiempo real de los flujos de mensajes, los patrones de conexión y el rendimiento del intermediario. La edición Pro incluye paneles integrados que muestran qué clientes consumen más ancho de banda, qué temas tienen las tasas de mensajes más altas y dónde se están formando cuellos de botella.
Obtienes métricas detalladas sobre la latencia de los mensajes, la profundidad de las colas y los patrones de comportamiento de los clientes. Estos datos te ayudan a optimizar las estructuras temáticas e identificar a los clientes problemáticos antes de que afecten a todo el sistema.
Las integraciones de bases de datos y servicios en la nube eliminan la necesidad de aplicaciones puente personalizadas. La edición Pro puede reenviar automáticamente mensajes a PostgreSQL, MongoDB, InfluxDB, AWS IoT Core, Azure IoT Hub o Google Cloud IoT. Tú defines reglas de enrutamiento que determinan qué mensajes van a dónde en función de patrones de temas, contenido de mensajes o metadatos de clientes.
Las colas persistentes gestionan escenarios de gran volumen en los que la persistencia estándar de Mosquitto no es suficiente. La edición Pro puede almacenar en búfer millones de mensajes para clientes sin conexión y distribuir la carga entre varias instancias de intermediario. Incluye gestión automática de colas que evita el agotamiento de la memoria y mantiene las garantías de ordenación de mensajes.
La compatibilidad con clústeres te permite ejecutar varias instancias de broker que comparten la carga de mensajes y proporcionan protección contra fallos. Cuando un bróker deja de funcionar, los clientes se vuelven a conectar automáticamente a instancias que funcionan correctamente sin perder mensajes ni suscripciones.
La edición Pro es ideal cuando necesitas fiabilidad y funciones de gestión de nivel empresarial que te llevarían meses crear por tu cuenta.
Ventajas y desventajas de usar Mosquitto en Docker
Docker facilita la implementación, pero no es la solución perfecta para todos los casos.
Pros
- La coherencia entre plataformas elimina los problemas de las instalaciones específicas para cada sistema operativo. El mismo comando Docker funciona en Windows, macOS y Linux sin necesidad de buscar diferentes gestores de paquetes ni lidiar con conflictos de dependencias. Tu configuración de desarrollo coincide exactamente con la producción, lo que significa menos sorpresas cuando realizas la implementación.
- Las actualizaciones de versiones simples se realizan cambiando las etiquetas de imagen. En lugar de desinstalar la versión antigua y esperar que la actualización no altere tu configuración, solo tienes que descargar una nueva imagen y reiniciar el contenedor. La reversión tarda unos segundos si algo sale mal.
- La facilidad para realizar copias de seguridad y migraciones se consigue utilizando volúmenes para tus datos. Copia el directorio
mosquittoen otra máquina, ejecuta el mismo comando Docker y volverás a estar conectado. Cambiar de proveedor de nubes o actualizar el hardware se convierte en una simple transferencia de archivos.
Contras
Docker no es todo ventajas.
- Los problemas de permisos de volumen afectan a ciertos sistemas operativos, especialmente al cambiar entre hosts Windows y Linux. Tú dedicarás tiempo a solucionar problemas de propiedad y a lidiar con incompatibilidades entre UID y GID que no existirían con una instalación nativa.
- La configuración adicional necesaria para la seguridad de nivel de producción significa que Docker añade complejidad en lugar de eliminarla. Debes gestionar las políticas de red, los contextos de seguridad de los contenedores y el cifrado de volúmenes, además de las propias funciones de seguridad de Mosquitto. Las instalaciones nativas te permiten utilizar directamente los marcos de seguridad existentes en tu sistema operativo.
- El rendimiento potencial se ve afectado en escenarios de alto rendimiento en los que cada microsegundo cuenta. La capa de red del contenedor y los montajes de volúmenes añaden una sobrecarga que las instalaciones nativas evitan. Para la mayoría de las aplicaciones de IoT, esta diferencia es insignificante, pero los sistemas industriales en tiempo real podrían notar la latencia.
Docker es la mejor opción cuando necesitas implementaciones coherentes y una gestión sencilla en diferentes entornos.
Conclusión
Ejecutar Mosquitto en Docker te proporciona un bróker MQTT fiable que funciona de forma consistente en todos los entornos. No importa si estás creando prototipos de dispositivos IoT, construyendo sistemas de automatización del hogar o conectando sensores en desarrollo, Docker elimina la complejidad de la configuración y te permite centrarte en tu proyecto real.
Si tienes pensado utilizar Mosquitto en producción, recuerda lo siguiente:
- Protege tu broker antes de exponerlo a Internet.
- Habilita la autenticación con
mosquitto_passwdy configura el cifrado TLS con los certificados adecuados. - Restringir el acceso solo a los clientes que lo necesiten.
Un bróker MQTT sin proteger se convierte en una puerta abierta para que los atacantes supervisen las comunicaciones de los dispositivos o inyecten comandos maliciosos.
Para implementaciones empresariales que requieren funciones avanzadas como control de acceso basado en roles, agrupación en clústeres o integración LDAP, Mosquitto Pro Edition ofrece herramientas de gestión y escalabilidad que superan a las de la versión de código abierto.
¿Estás listo para mejorar tus conocimientos sobre Docker y Kubernetes? Inscríbete en nuestro Contenedorización y virtualización con Docker y Kubernetes para desarrollar habilidades a través del programa y conseguir un empleo.
Preguntas frecuentes sobre Mosquitto Docker
¿Cuál es la diferencia entre ejecutar Mosquitto de forma nativa y en Docker?
Docker proporciona coherencia entre plataformas y elimina los conflictos de dependencia que afectan a las instalaciones nativas. Tu configuración de Mosquitto funciona de forma idéntica en Windows, macOS y Linux sin necesidad de buscar paquetes específicos para cada plataforma. Docker también simplifica las actualizaciones y reversiones de versiones: solo hay que cambiar la etiqueta de la imagen y reiniciar el contenedor. Sin embargo, las instalaciones nativas pueden ofrecer un rendimiento ligeramente superior en escenarios de alto rendimiento.
¿Necesitas Docker Compose para ejecutar Mosquitto o puedes utilizar los comandos habituales de Docker?
Puedes ejecutar Mosquitto con los comandos habituales de Docker utilizando docker run. Docker Compose simplemente facilita la gestión, especialmente cuando ejecutas varios servicios como Home Assistant o Node-RED junto con Mosquitto. Si solo estás ejecutando Mosquitto por sí solo, un simple comando « docker run » funciona perfectamente.
¿Mosquitto en Docker es lo suficientemente seguro para su uso en producción?
Mosquitto Docker puede estar listo para su uso en producción con la configuración adecuada. Deberás desactivar el acceso anónimo, configurar la autenticación con mosquitto_passwd, configurar el cifrado TLS y restringir el acceso a la red solo a clientes de confianza. El contenedor en sí mismo no añade vulnerabilidades de seguridad, pero tú eres responsable de proteger tanto la configuración de Mosquitto como el entorno Docker.
¿Por qué tu contenedor Mosquitto se inicia pero rechaza las conexiones externas?
Mosquitto 2.0+ utiliza de forma predeterminada el modo solo local, que solo acepta conexiones desde localhost dentro del contenedor. Debes crear un archivo mosquitto.conf con listener 1883 y allow_anonymous true (para pruebas) o la configuración de autenticación adecuada. Coloca este archivo de configuración en tu directorio montado /mosquitto/config y reinicia el contenedor.
¿Cómo se soluciona el error «Permiso denegado» cuando Mosquitto intenta escribir en volúmenes montados?
El contenedor Mosquitto se ejecuta con el ID de usuario 1883, pero es posible que tus directorios host tengan una propiedad diferente. Ejecuta « sudo chown -R 1883:1883 mosquitto/ » para corregir la propiedad, o crea primero el usuario mosquitto con « sudo useradd -u 1883 mosquitto » y, a continuación, cambia la propiedad. En algunos sistemas, también puedes ejecutar el contenedor con --user $(id -u):$(id -g) para que coincida con tu usuario host.

