emqx/emqx-enterprise支持的架构:amd64、arm64v8
EMQX 是世界上最具可扩展性和可靠性的 MQTT 平台,专为高性能、可靠和安全的 IoT 数据基础设施设计。它支持 MQTT 5.0、3.1.1 和 3.1,以及 MQTT-SN、CoAP、LwM2M、MQTT over QUIC 等其他协议。EMQX 能够连接数百万 IoT 设备,实时处理和路由消息,并与各类后端数据系统集成。它适用于 AI、IoT、工业物联网(IIoT)、联网车辆、智慧城市等领域的应用。
从 5.9.0 版本开始,EMQX 统一了功能并采用商业源代码许可证(BSL)1.1。这意味着所有功能(包括强大的数据集成、流设计器、高级可观测性和企业级安全性)现在都在单个 Docker 镜像中可用。
了解更多许可证变更:
重要提示:集群需要许可证密钥(v5.9.0+)!
在 BSL 1.1 许可下,部署 EMQX 集群(超过 1 个节点)需加载许可证密钥,即使是 BSL 允许的免费/开发用例也不例外。有关获取和应用许可证的详细信息,请参阅许可证常见问题和许可证文档。
EMQX 为现代连接系统提供以下关键能力:
运行单个 EMQX 节点:
bashdocker run -d --name emqx \ -p 1883:1883 -p 8083:8083 -p 8084:8084 \ -p 8883:8883 -p ***:*** \ emqx/emqx-enterprise:latest
EMQX 代理在 Docker 容器中以 Linux 用户 emqx 运行。
etc/emqx.conf 中的所有 EMQX 配置可通过环境变量设置。默认情况下,前缀为 EMQX_ 的环境变量会映射到配置文件中的键值对。
示例:
bash# EMQX_LISTENERS__TCP__DEFAULT__BIND <-> listeners.tcp.default.bind # EMQX_LISTENERS__SSL__DEFAULT__ACCEPTORS <-> listeners.ssl.default.acceptors # EMQX_ZONES__DEFAULT__MQTT__MAX_PACKET_SIZE <--> zones.default.mqtt.max_packet_size # 规则:移除前缀 EMQX_,大写字母转小写,下划线替换为点 # 示例:将 MQTT TCP 端口设置为 1884 docker run -d --name emqx \ -e EMQX_LISTENERS__TCP__DEFAULT__BIND=1884 \ -p ***:*** \ -p 1884:1884 \ emqx/emqx-enterprise:latest
更多配置详情见 官方文档。
注意: 部署 EMQX 集群(超过 1 个节点)需加载许可证密钥。
EMQX 支持多种集群方式,详情见 文档。
通过 docker compose 创建静态节点列表集群:
docker-compose.yaml:yamlservices: emqx1: image: emqx/emqx-enterprise:latest ports: - "***:***" environment: - "EMQX_NODE__NAME=***" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[***, ***]" - "EMQX_LICENSE__KEY=<您的许可证密钥>" networks: emqx-bridge: aliases: - node1.emq*** emqx2: image: emqx/emqx-enterprise:latest environment: - "EMQX_NODE__NAME=***" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[***, ***]" - "EMQX_LICENSE__KEY=<您的许可证密钥>" networks: emqx-bridge: aliases: - node2.emq*** networks: emqx-bridge: driver: bridge
bashdocker compose -p my_emqx up -d
bash$ docker exec -it my_emqx_emqx1_1 sh -c "emqx ctl cluster status" Cluster status: #[running_nodes => ['***','***'], stopped_nodes => []}
需持久化的目录:
/opt/emqx/data/opt/emqx/logEMQX 使用 data/mnesia/<node_name> 存储数据,建议使用稳定标识符(如主机名或 FQDN)作为节点名称,避免因名称变更导致数据丢失。
docker compose 配置示例:
yamlvolumes: vol-emqx-data: name: foo-emqx-data vol-emqx-log: name: foo-emqx-log services: emqx: image: emqx/emqx-enterprise:latest hostname: node.emq*** restart: always environment: EMQX_NODE__NAME: "***" volumes: - vol-emqx-data:/opt/emqx/data - vol-emqx-log:/opt/emqx/log
Linux 主机调优建议参考 调优指南。若通过 Docker 调优,需确保 Docker 版本 ≥1.12:
bashdocker run -d --name emqx -p ***:*** -p 1883:1883 \ --sysctl fs.file-max=2097152 \ --sysctl fs.nr_open=2097152 \ --sysctl net.core.somaxconn=32768 \ --sysctl net.ipv4.tcp_max_syn_backlog=*** \ --sysctl net.core.netdev_max_backlog=*** \ --sysctl net.ipv4.ip_local_port_range="1000 65535" \ --sysctl net.core.rmem_default=262144 \ --sysctl net.core.wmem_default=262144 \ --sysctl net.core.rmem_max=*** \ --sysctl net.core.wmem_max=*** \ --sysctl net.core.optmem_max=*** \ --sysctl net.ipv4.tcp_rmem="1024 4096 ***" \ --sysctl net.ipv4.tcp_wmem="1024 4096 ***" \ --sysctl net.ipv4.tcp_max_tw_buckets=*** \ --sysctl net.ipv4.tcp_fin_timeout=15 \ emqx/emqx-enterprise:latest
注意:不要以特权模式运行 EMQX Docker 容器,也不要挂载系统 proc 到容器中进行内核调优,这存在安全风险。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务