本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

获取帮助: 联系我们
提交问题: GitHub 问题跟踪器
维护者: HiveMQ
Dockerfiles: GitHub
HiveMQ 是一个基于 MQTT 的消息平台,专为物联网设备间快速、高效、可靠的数据传输而设计。它使用 MQTT 协议实现设备与企业系统之间的即时双向数据推送。
HiveMQ 旨在解决组织构建新型物联网应用时面临的关键技术挑战,包括:
HiveMQ 核心是兼容 MQTT 3.1、MQTT 3.1.1 和 MQTT 5.0 的 MQTT broker,其优势在于为企业用例和专业部署设计的附加功能。
有关更多信息,请参见功能。
| 标签 | 含义 |
|---|---|
| latest | 始终指向 HiveMQ 基础镜像的最新版本 |
| dns-latest | 始终指向 HiveMQ DNS 发现镜像的最新版本 |
<version> | 提供指定版本 broker 的基础镜像(例如 4.0.0) |
dns-<version> | 基于指定版本基础镜像的 DNS 发现镜像 |
k8s-<version> | 用于 Kubernetes Operator 的镜像 |
要启动单个 HiveMQ 实例并开放 MQTT 端口及控制中心访问,请获取 Docker 并运行以下命令:
docker run --ulimit nofile=500000:500000 -p 8080:8080 -p 8000:8000 -p 1883:1883 hivemq/hivemq4
您可以通过 MQTT(1883 端口)、WebSocket(8000 端口)连接 broker,或通过 8080 端口访问控制中心。
对于 HiveMQ 集群部署,建议使用 DNS 发现镜像。该镜像内置 HiveMQ DNS 发现扩展,可与任何支持通过轮询 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):
docker swarm init
docker network create -d overlay --attachable myNetwork
docker 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 端口连接,连接将转发到任意集群节点。
有关集群管理的更多信息,请参见 管理集群。
注意:建议使用 Kubernetes Operator,它能简化 HiveMQ 在 Kubernetes 上的部署。
生产环境中,建议将 DNS 发现镜像与 Kubernetes 结合使用。Kubernetes 中需配置适当的部署以利用 DNS 发现,无头服务 可提供用于发现的 broker DNS 记录。
以下是使用 DNS 发现的 3 节点 HiveMQ 集群的复制控制器配置示例。需根据 Kubernetes 命名空间和配置的域替换 HIVEMQ_DNS_DISCOVERY_ADDRESS:
apiVersion: 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):kind: Service apiVersion: v1 metadata: name: hivemq-control-center spec: selector: app: hivemq-cluster1 ports: - protocol: TCP port: 8080 targetPort: 8080 sessionAffinity: ClientIP type: Load***
kubectl create -f web.yaml 创建服务。注意: 根据 Kubernetes 环境提供商,负载均衡器可能不可用或需要额外配置才能访问控制中心。
要允许外部客户端访问 Kubernetes 集群的 MQTT 端口,请执行以下步骤:
mqtt.yaml):kind: 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: Load***
kubectl create -f mqtt.yaml 创建服务。注意: externalTrafficPolicy 注解用于允许 Kubernetes 服务维持大量并发连接,详见 服务源 IP。
环境变量 HIVEMQ_CONTROL_CENTER_PASSWORD 允许通过定义自定义密码的 SHA256 哈希来设置控制中心密码。环境变量 HIVEMQ_CONTROL_CENTER_USER 可配置用户名。
有关如何生成密码哈希的更多信息,请参见 生成 SHA256 密码。
要在 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 镜像的更多信息,请参见 文档。
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429