如果你使用 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://github.com/emqx/emqx
提交问题:
https://github.com/emqx/emqx/issues
支持的架构:
amd64、arm64v8、arm32v7、i386、s390x
支持的Docker版本:
https://github.com/docker/docker-ce/releases/latest
https://github.com/emqx/emqx/ 是一款完全开源、高可扩展、高可用的分布式MQTT消息代理,专为IoT、M2M和移动应用设计,可处理数千万并发客户端。
从3.0版本开始,EMQX代理完全支持MQTT V5.0协议规范,并向后兼容MQTT V3.1和V3.1.1,同时支持MQTT-SN、CoAP、LwM2M、WebSocket和STOMP等其他通信协议。3.0版本的EMQX代理集群可支持超过1000万并发MQTT连接。
在Docker镜像下执行以下命令启动EMQX:
bashdocker run -d --name emqx emqx/emqx:$(tag)
示例:
bashdocker run -d --name emqx -p 18083:18083 -p 1883:1883 emqx/emqx:latest
EMQX代理在Docker容器中以Linux用户emqx身份运行。
可通过环境变量配置EMQX Docker容器。默认情况下,前缀为EMQX_的环境变量会映射为配置文件中的键值对。可通过覆盖CUTTLEFISH_ENV_OVERRIDE_PREFIX来修改前缀。
环境变量映射规则
示例:
bashEMQX_LISTENER__SSL__EXTERNAL__ACCEPTORS <--> listener.ssl.external.acceptors EMQX_MQTT__MAX_PACKET_SIZE <--> mqtt.max_packet_size
EMQX___(双下划线)替换为.(点)若设置CUTTLEFISH_ENV_OVERRIDE_PREFIX=DEV_,则映射规则变为:
bashDEV_LISTENER__SSL__EXTERNAL__ACCEPTORS <--> listener.ssl.external.acceptors DEV_MQTT__MAX_PACKET_SIZE <--> mqtt.max_packet_size
不映射的环境变量
bashEMQX_NAME EMQX_HOST
这些环境变量不会用于配置文件。
EMQX配置
注意:https://github.com/emqx/emqx/blob/main-v4.3/etc/emqx.conf 中的所有EMQX配置均可通过环境变量设置。以下列表仅为示例,非完整配置。
| 选项 | 默认值 | 映射关系 | 描述 |
|---|---|---|---|
| EMQX_NAME | 容器名称 | 无 | EMQX节点短名称 |
| EMQX_HOST | 容器IP | 无 | EMQX节点主机(IP或FQDN) |
此列表不完整,可能随https://github.com/emqx/emqx/blob/main-v4.3/etc/emqx.conf%E5%92%8C%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%8F%98%E5%8C%96%EF%BC%8C%E4%BD%86%E6%98%A0%E5%B0%84%E8%A7%84%E5%88%99%E4%B8%80%E8%87%B4%E3%80%82
若设置EMQX_NAME和EMQX_HOST且未设置EMQX_NODE_NAME,则EMQX_NODE_NAME=$EMQX_NAME@$EMQX_HOST。
示例:将MQTT TCP端口设置为1883
bashdocker run -d --name emqx -e EMQX_LISTENER__TCP__EXTERNAL=1883 -p 18083:18083 -p 1883:1883 emqx/emqx:latest
已加载模块配置
| 选项 | 默认值 | 描述 |
|---|---|---|
| EMQX_LOADED_MODULES | 见下文内容 | EMQX默认加载的模块 |
默认EMQX_LOADED_MODULES环境变量包含:
emqx_mod_acl_internalemqx_mod_presencebash# 默认EMQX_LOADED_MODULES环境变量 EMQX_LOADED_MODULES="emqx_mod_acl_internal,emqx_mod_acl_internal"
示例:设置EMQX_LOADED_MODULES=emqx_mod_delayed,emqx_mod_rewrite以加载这两个模块。支持逗号、空格或其他分隔符:
bashEMQX_LOADED_MODULES="emqx_mod_delayed,emqx_mod_rewrite" EMQX_LOADED_MODULES="emqx_mod_delayed emqx_mod_rewrite" EMQX_LOADED_MODULES="emqx_mod_delayed | emqx_mod_rewrite"
已加载插件配置
| 选项 | 默认值 | 描述 |
|---|---|---|
| EMQX_LOADED_PLUGINS | 见下文内容 | EMQX默认加载的插件 |
默认EMQX_LOADED_PLUGINS环境变量包含:
emqx_reconemqx_retaineremqx_rule_engineemqx_managementemqx_dashboardbash# 默认EMQX_LOADED_PLUGINS环境变量 EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management,emqx_dashboard"
示例:设置EMQX_LOADED_PLUGINS=emqx_auth_redis,emqx_auth_mysql以加载这两个插件。支持逗号、空格或其他分隔符:
bashEMQX_LOADED_PLUGINS="emqx_auth_redis,emqx_auth_mysql" EMQX_LOADED_PLUGINS="emqx_auth_redis emqx_auth_mysql" EMQX_LOADED_PLUGINS="emqx_auth_redis | emqx_auth_mysql"
EMQX插件配置
前缀为EMQX_的环境变量同样适用于所有EMQX插件的配置文件(.替换为__)。
示例:
bashEMQX_AUTH__REDIS__SERVER <--> auth.redis.server EMQX_AUTH__REDIS__PASSWORD <--> auth.redis.password
无需关心插件配置文件位置,Docker镜像会自动查找并配置。
示例:使用Redis认证插件
bashdocker run -d --name emqx -p 18083:18083 -p 1883:1883 -p 4369:4369 \ -e EMQX_LISTENER__TCP__EXTERNAL=1883 \ -e EMQX_LOADED_PLUGINS="emqx_auth_redis" \ -e EMQX_AUTH__REDIS__SERVER="your.redis.server:6379" \ -e EMQX_AUTH__REDIS__PASSWORD="password_for_redis" \ -e EMQX_AUTH__REDIS__PASSWORD_HASH=plain \ emqx/emqx:latest
对于带编号的配置项(如backend.redis.pool1.server),可通过唯一编号配置多个实例:
bashdocker run -d --name emqx -p 18083:18083 -p 1883:1883 -p 4369:4369 \ -e EMQX_BACKEND_REDIS_POOL1__SERVER=127.0.0.1:6379 \ -e EMQX_BACKEND__REDIS__POOL5__SERVER=127.0.0.5:6379 \ -e EMQX_BACKEND__REDIS__HOOK_MESSAGE__PUBLISH__1='{"topic": "persistant/topic1", "action": {"function": "on_message_publish"}, "pool": "pool1"}' \ -e EMQX_BACKEND__REDIS__HOOK_MESSAGE__PUBLISH__2='{"topic": "persistant/topic2", "action": {"function": "on_message_publish"}, "pool": "pool1"}' \ emqx/emqx:latest
EMQX支持多种集群方式,详见文档。以下通过docker-compose创建静态节点列表集群。
创建docker-compose.yaml:
yamlversion: '3' services: emqx1: image: emqx/emqx:latest environment: - "EMQX_NAME=emqx" - "EMQX_HOST=node1.emqx.io" - "EMQX_CLUSTER__DISCOVERY=static" - "EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io, emqx@node2.emqx.io" networks: emqx-bridge: aliases: - node1.emqx.io emqx2: image: emqx/emqx:latest environment: - "EMQX_NAME=emqx" - "EMQX_HOST=node2.emqx.io" - "EMQX_CLUSTER__DISCOVERY=static" - "EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io, emqx@node2.emqx.io" networks: emqx-bridge: aliases: - node2.emqx.io 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 => ['emqx@node1.emqx.io','emqx@node2.emqx.io'], stopped_nodes => []}
若需持久化EMQX Docker容器,需保留以下目录:
/opt/emqx/data/opt/emqx/etc/opt/emqx/log由于这些目录中的部分数据存储在/opt/emqx/data/mnesia/${node_name}下,需复用相同节点名称以恢复之前状态。可通过指定EMQX_NAME和EMQX_HOST(如EMQX_HOST=127.0.0.1或网络别名)实现。
docker-compose示例:
yamlvolumes: vol-emqx-data: name: foo-emqx-data vol-emqx-etc: name: foo-emqx-etc vol-emqx-log: name: foo-emqx-log services: emqx: image: emqx/emqx:v4.0.0 restart: always environment: EMQX_NAME: foo_emqx EMQX_HOST: 127.0.0.1 volumes: - vol-emqx-data:/opt/emqx/data - vol-emqx-etc:/opt/emqx/etc - vol-emqx-log:/opt/emqx/log
在Linux主机上,最简单的方式是参考调优指南。若需通过Docker调优内核,需确保Docker版本≥1.12:
bashdocker run -d --name emqx -p 18083:18083 -p 1883:1883 -p 4369:4369 \ --sysctl fs.file-max=2097152 \ --sysctl fs.nr_open=2097152 \ --sysctl net.core.somaxconn=32768 \ --sysctl net.ipv4.tcp_max_syn_backlog=16384 \ --sysctl net.core.netdev_max_backlog=16384 \ --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=16777216 \ --sysctl net.core.wmem_max=16777216 \ --sysctl net.core.optmem_max=16777216 \ --sysctl net.ipv4.tcp_rmem=1024 4096 16777216 \ --sysctl net.ipv4.tcp_wmem=1024 4096 16777216 \ --sysctl net.ipv4.tcp_max_tw_buckets=1048576 \ --sysctl net.ipv4.tcp_fin_timeout=15 \ emqx/emqx:latest
注意:不要以特权模式运行EMQX Docker容器,或挂载系统proc到容器中调优内核,这是不安全的。
获取帮助:
[***] 或 https://github.com/emqx/emqx
提交问题:
https://github.com/emqx/emqx/issues
支持的架构:
amd64、arm64v8、arm32v7、i386、s390x
支持的Docker版本:
https://github.com/docker/docker-ce/releases/latest
https://github.com/emqx/emqx/ 是一款完全开源、高可扩展、高可用的分布式MQTT消息代理,专为IoT、M2M和移动应用设计,可处理数千万并发客户端。
从3.0版本开始,EMQX代理完全支持MQTT V5.0协议规范,并向后兼容MQTT V3.1和V3.1.1,同时支持MQTT-SN、CoAP、LwM2M、WebSocket和STOMP等其他通信协议。3.0版本的EMQX代理集群可支持超过1000万并发MQTT连接。
在Docker镜像下执行以下命令启动EMQX:
bashdocker run -d --name emqx emqx/emqx:$(tag)
示例:
bashdocker run -d --name emqx -p 18083:18083 -p 1883:1883 emqx/emqx:latest
EMQX代理在Docker容器中以Linux用户emqx身份运行。
可通过环境变量配置EMQX Docker容器。默认情况下,前缀为EMQX_的环境变量会映射为配置文件中的键值对。可通过覆盖CUTTLEFISH_ENV_OVERRIDE_PREFIX来修改前缀。
环境变量映射规则
示例:
bashEMQX_LISTENER__SSL__EXTERNAL__ACCEPTORS <--> listener.ssl.external.acceptors EMQX_MQTT__MAX_PACKET_SIZE <--> mqtt.max_packet_size
EMQX___(双下划线)替换为.(点)若设置CUTTLEFISH_ENV_OVERRIDE_PREFIX=DEV_,则映射规则变为:
bashDEV_LISTENER__SSL__EXTERNAL__ACCEPTORS <--> listener.ssl.external.acceptors DEV_MQTT__MAX_PACKET_SIZE <--> mqtt.max_packet_size
不映射的环境变量
bashEMQX_NAME EMQX_HOST
这些环境变量不会用于配置文件。
EMQX配置
注意:https://github.com/emqx/emqx/blob/main-v4.3/etc/emqx.conf 中的所有EMQX配置均可通过环境变量设置。以下列表仅为示例,非完整配置。
| 选项 | 默认值 | 映射关系 | 描述 |
|---|---|---|---|
| EMQX_NAME | 容器名称 | 无 | EMQX节点短名称 |
| EMQX_HOST | 容器IP | 无 | EM |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


来自真实用户的反馈,见证轩辕镜像的优质服务