
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
获取帮助: https://www.hivemq.com/contact/
提交问题: https://github.com/hivemq/hivemq4-docker-images/issues
维护者: https://www.hivemq.com
Dockerfiles: https://github.com/hivemq/hivemq4-docker-images
HiveMQ 是一个基于 MQTT 的消息平台,专为物联网设备间快速、高效、可靠的数据传输而设计。它使用 MQTT 协议实现设备与企业系统之间的即时双向数据推送。
HiveMQ 旨在解决组织构建新型物联网应用时面临的关键技术挑战,包括:
HiveMQ 核心是兼容 MQTT 3.1、MQTT 3.1.1 和 MQTT 5.0 的 MQTT broker,其优势在于为企业用例和专业部署设计的附加功能。
有关更多信息,请参见https://www.hivemq.com/features/%E3%80%82
| 标签 | 含义 |
|---|---|
| latest | 始终指向 HiveMQ 基础镜像的最新版本 |
| dns-latest | 始终指向 HiveMQ DNS 发现镜像的最新版本 |
<version> | 提供指定版本 broker 的基础镜像(例如 4.0.0) |
dns-<version> | 基于指定版本基础镜像的 DNS 发现镜像 |
k8s-<version> | 用于 https://www.hivemq.com/docs/operator/latest 的镜像 |
要启动单个 HiveMQ 实例并开放 MQTT 端口及控制中心访问,请https://www.docker.com/get-started 并运行以下命令:
bashdocker run --ulimit nofile=500000:500000 -p 8080:8080 -p 8000:8000 -p 1883:1883 hivemq/hivemq4
您可以通过 MQTT(1883 端口)、WebSocket(8000 端口)连接 broker,或通过 8080 端口访问控制中心。
对于 HiveMQ 集群部署,建议使用 DNS 发现镜像。该镜像内置 https://www.hivemq.com/extension/dns-discovery-extension/%EF%BC%8C%E5%8F%AF%E4%B8%8E%E4%BB%BB%E4%BD%95%E6%94%AF%E6%8C%81%E9%80%9A%E8%BF%87%E8%BD%AE%E8%AF%A2 A 记录进行服务发现的容器编排引擎配合使用。也可使用提供 A 记录的自定义解决方案。
以下环境变量可分别用于自定义发现和 broker 配置:
| 环境变量 | 默认值 | 含义 |
|---|---|---|
| HIVEMQ_DNS_DISCOVERY_ADDRESS | - | 用于集群发现的 A 记录获取地址 |
| HIVEMQ_DNS_DISCOVERY_INTERVAL | 31 | 搜索新节点的时间间隔(秒) |
| HIVEMQ_DNS_DISCOVERY_TIMEOUT | 30 | DNS 解析超时时间(秒) |
| HIVEMQ_CLUSTER_PORT | 8000 | 集群传输使用的端口 |
| HIVEMQ_BIND_ADDRESS | - | 集群传输绑定地址,仅在默认策略(解析主机名)失败时需要设置 |
| HIVEMQ_CLUSTER_TRANSPORT_TYPE | UDP | 集群传输协议类型 |
| HIVEMQ_LICENSE | - | broker 使用的 base64 编码许可证文件 |
| HIVEMQ_CONTROL_CENTER_USER | admin | HiveMQ 控制中心登录用户名 |
| HIVEMQ_CONTROL_CENTER_PASSWORD | adminhivemq 的 SHA256 哈希 | HiveMQ 控制中心认证密码哈希 |
| HIVEMQ_HIVEMQ_NO_ROOT_STEP_DOWN | - | 设置为 true 可禁用启动时的 root 权限降级,详见 HiveMQ 基础镜像 |
| HIVEMQ_ALLOW_ALL_CLIENTS | true | 是否启用默认内置的 allow-all 扩展(4.3.0 及以上版本),设为 false 会在启动时删除该扩展(4.3.0 之前版本无效) |
| HIVEMQ_LOG_LEVEL | INFO | 根日志级别(4.3.1 及以上版本可用) |
以下是在 Docker Swarm 和 Kubernetes 中使用该镜像的示例,其他支持 DNS 发现的环境也兼容。
要在本地运行 HiveMQ 集群,可使用 Docker Swarm(注意:不建议在生产环境使用 Docker Swarm):
bashdocker swarm init
bashdocker network create -d overlay --attachable myNetwork
bashdocker service create \ --replicas 3 --network myNetwork \ --env HIVEMQ_DNS_DISCOVERY_ADDRESS=tasks.hivemq \ --publish target=1883,published=1883 \ --publish target=8080,published=8080 \ -p 8000:8000/udp \ --name hivemq \ hivemq/hivemq4:dns-latest
此命令将部署 3 节点集群,并将 MQTT(1883)和 HiveMQ 控制中心(8080)端口转发到主机网络。MQTT 客户端可通过 1883 端口连接,连接将转发到任意集群节点。
有关集群管理的更多信息,请参见 https://github.com/hivemq/hivemq4-docker-images#managing-the-cluster%E3%80%82
注意:建议使用 https://www.hivemq.com/docs/operator/latest%EF%BC%8C%E5%AE%83%E8%83%BD%E7%AE%80%E5%8C%96 HiveMQ 在 Kubernetes 上的部署。
生产环境中,建议将 DNS 发现镜像与 Kubernetes 结合使用。Kubernetes 中需配置适当的部署以利用 DNS 发现,https://kubernetes.io/docs/concepts/services-networking/service/#headless-services 可提供用于发现的 broker DNS 记录。
以下是使用 DNS 发现的 3 节点 HiveMQ 集群的复制控制器配置示例。需根据 Kubernetes 命名空间和配置的域替换 HIVEMQ_DNS_DISCOVERY_ADDRESS:
yamlapiVersion: v1 kind: ReplicationController metadata: name: hivemq-replica spec: replicas: 3 selector: app: hivemq-cluster1 template: metadata: name: hivemq-cluster1 labels: app: hivemq-cluster1 spec: containers: - name: hivemq-pods image: hivemq/hivemq4:dns-latest ports: - containerPort: 8080 protocol: TCP name: hivemq-control-center - containerPort: 1883 protocol: TCP name: mqtt env: - name: HIVEMQ_DNS_DISCOVERY_ADDRESS value: "hivemq-discovery.default.svc.cluster.local." - name: HIVEMQ_DNS_DISCOVERY_TIMEOUT value: "20" - name: HIVEMQ_DNS_DISCOVERY_INTERVAL value: "21" - name: HIVEMQ_CLUSTER_TRANSPORT_TYPE value: "TCP" readinessProbe: tcpSocket: port: 1883 initialDelaySeconds: 30 periodSeconds: 60 failureThreshold: 60 livenessProbe: tcpSocket: port: 1883 initialDelaySeconds: 30 periodSeconds: 60 failureThreshold: 60 --- kind: Service apiVersion: v1 metadata: name: hivemq-discovery annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec: selector: app: hivemq-cluster1 ports: - protocol: TCP port: 1883 targetPort: 1883 clusterIP: None
要访问 Kubernetes 集群中的 HiveMQ 控制中心,请执行以下步骤:
web.yaml):yamlkind: Service apiVersion: v1 metadata: name: hivemq-control-center spec: selector: app: hivemq-cluster1 ports: - protocol: TCP port: 8080 targetPort: 8080 sessionAffinity: ClientIP type: LoadBalancer
kubectl create -f web.yaml 创建服务。注意: 根据 Kubernetes 环境提供商,负载均衡器可能不可用或需要额外配置才能访问控制中心。
要允许外部客户端访问 Kubernetes 集群的 MQTT 端口,请执行以下步骤:
mqtt.yaml):yamlkind: Service apiVersion: v1 metadata: name: hivemq-mqtt annotations: service.spec.externalTrafficPolicy: Local spec: selector: app: hivemq-cluster1 ports: - protocol: TCP port: 1883 targetPort: 1883 type: LoadBalancer
kubectl create -f mqtt.yaml 创建服务。注意: externalTrafficPolicy 注解用于允许 Kubernetes 服务维持大量并发连接,详见 https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-type-nodeport%E3%80%82
环境变量 HIVEMQ_CONTROL_CENTER_PASSWORD 允许通过定义自定义密码的 SHA256 哈希来设置控制中心密码。环境变量 HIVEMQ_CONTROL_CENTER_USER 可配置用户名。
有关如何生成密码哈希的更多信息,请参见 https://www.hivemq.com/docs/4/control-center/configuration.html#generate-password%E3%80%82
要在 HiveMQ 容器中使用许可证,需先将许可证文件编码为字符串。运行 cat license.lic | base64(将 license.lic 替换为许可证文件路径),然后将结果字符串设置为容器的 HIVEMQ_LICENSE 环境变量值。
默认情况下,HiveMQ 镜像使用内置的 hivemq-allow-all-extension。设置环境变量 HIVEMQ_ALLOW_ALL_CLIENTS 为 false 可在启动时删除该扩展。
默认情况下,HiveMQ 镜像在启动时检查 root 权限,若存在则切换到低权限用户以增强容器安全性。设置环境变量 HIVEMQ_NO_ROOT_STEP_DOWN 为 false 可跳过此步骤。
默认情况下,HiveMQ DNS 发现镜像尝试使用容器的 ${HOSTNAME} 设置绑定地址,以确保 HiveMQ 将集群连接绑定到正确接口。设置 HIVEMQ_BIND_ADDRESS 环境变量可覆盖此行为,broker 将使用指定值作为绑定地址。
默认情况下,HiveMQ DNS 发现镜像使用 UDP 作为集群传输协议。设置 HIVEMQ_CLUSTER_TRANSPORT_TYPE 环境变量为 TCP 可改用 TCP。
注意: 建议使用 TCP 作为集群传输协议,可降低高网络负载下网络分区的风险。
有关构建自定义 HiveMQ 镜像的更多信息,请参见 https://www.hivemq.com/docs/hivemq/latest/user-guide/docker.html#custom%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务