
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
EMQ(Erlang MQTT Broker)是一个分布式、大规模可扩展、高扩展性的MQTT消息代理,采用Erlang/OTP编写。本Docker镜像提供了EMQ的便捷部署方式,适用于构建物联网(IoT)、实时通信等场景的消息中间件服务。
当前Docker镜像大小:37.1 MB
您可以自行构建此Docker镜像:
bashgit clone -b master https://github.com/emqtt/emq_docker.git cd emq_docker docker build -t emq:latest .
在Docker镜像下执行命令的基本格式:
bashdocker run --rm -ti -v `pwd`:$(somewhere) docker.xuanyuan.run/emq/$(image) $(somecommand)
例如,启动EMQ服务:
bashdocker run --rm -ti --name emq -p 18083:18083 -p 1883:1883 docker.xuanyuan.run/emq:latest
EMQ Erlang代理在Docker容器中以Linux用户emqtt身份运行。
使用环境变量配置EMQ Docker容器,遵循以下规则:
以EMQ_为前缀的环境变量映射到配置文件,其中.替换为__
示例:
EMQ_LISTENER__SSL__EXTERNAL__ACCEPTORS <--> listener.ssl.external.acceptors
EMQ_MQTT__MAX_PACKET_SIZE <--> mqtt.max_packet_size
以PLATFORM_为前缀的环境变量映射到配置文件中的模板字符串
示例:
PLATFORM_ETC_DIR <--> {{ platform_etc_dir }}
非映射环境变量(不用于配置文件):
EMQ_NAME、EMQ_HOST
注意:https://github.com/emqtt/emqttd/blob/master/etc/emq.conf%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89EMQ%E9%85%8D%E7%BD%AE%E5%9D%87%E5%8F%AF%E9%80%9A%E8%BF%87%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E8%AE%BE%E7%BD%AE%E3%80%82%E4%BB%A5%E4%B8%8B%E5%88%97%E8%A1%A8%E4%BB%85%E4%B8%BA%E7%A4%BA%E4%BE%8B%EF%BC%8C%E9%9D%9E%E5%AE%8C%E6%95%B4%E9%85%8D%E7%BD%AE%E3%80%82
| 选项 | 默认值 | 映射关系 | 描述 |
|---|---|---|---|
| EMQ_NAME | 容器名称 | none | EMQ节点短名称 |
| EMQ_HOST | 容器IP | none | EMQ节点主机(IP或FQDN) |
| EMQ_WAIT_TIME | 5 | none | 超时前等待时间(秒) |
| EMQ_JOIN_CLUSTER | none | none | 初始加入的集群 |
| EMQ_ADMIN_PASSWORD | public | none | EMQ管理员密码 |
| PLATFORM_ETC_DIR | /opt/emqtt/etc | {{ platform_etc_dir }} | 配置文件目录 |
| PLATFORM_LOG_DIR | /opt/emqtt/log | {{ platform_log_dir }} | 日志目录 |
| EMQ_NODE__NAME | EMQ_NAME@EMQ_HOST | node.name | Erlang节点名称(格式:name@ipaddress/host) |
| EMQ_NODE__COOKIE | emq_dist_cookie | node.cookie | 集群通信Cookie |
| EMQ_LOG__CONSOLE | console | log.console | 控制台日志输出方式 |
| EMQ_MQTT__ALLOW_ANONYMOUS | true | mqtt.allow_anonymous | 允许MQTT***登录 |
| EMQ_LISTENER__TCP__EXTERNAL | 1883 | listener.tcp.external | MQTT TCP端口 |
| EMQ_LISTENER__SSL__EXTERNAL | 8883 | listener.ssl.external | MQTT TLS/SSL端口 |
| EMQ_LISTENER__WS__EXTERNAL | 8083 | listener.ws.external | HTTP和WebSocket端口 |
| EMQ_LISTENER__WSS__EXTERNAL | 8084 | listener.wss.external | HTTPS和WSS端口 |
| EMQ_LISTENER__API__MGMT | 8080 | listener.api.mgmt | 管理API端口 |
| EMQ_MQTT__MAX_PACKET_SIZE | 64KB | mqtt.max_packet_size | 允许的最大数据包大小 |
若设置EMQ_NAME和EMQ_HOST但未设置EMQ_NODE__NAME,则EMQ_NODE__NAME=$EMQ_NAME@$EMQ_HOST。
示例:将MQTT TCP端口设置为1883
bashdocker run --rm -ti --name emq -e EMQ_LISTENER__TCP__EXTERNAL=1883 -p 18083:18083 -p 1883:1883 docker.xuanyuan.run/emq:latest
| 选项 | 默认值 | 描述 |
|---|---|---|
| EMQ_LOADED_PLUGINS | 见下文内容 | EMQ默认加载的插件 |
默认EMQ_LOADED_PLUGINS环境变量包含:
emq_reconemq_modulesemq_retaineremq_dashboardbash# 默认EMQ_LOADED_PLUGINS环境变量值 EMQ_LOADED_PLUGINS="emq_recon,emq_modules,emq_retainer,emq_dashboard"
示例:加载emq_auth_redis插件,将其添加到EMQ_LOADED_PLUGINS,可使用逗号、空格或其他分隔符:
bashEMQ_LOADED_PLUGINS="emq_auth_redis,emq_recon,emq_modules,emq_retainer,emq_dashboard" EMQ_LOADED_PLUGINS="emq_auth_redis emq_recon emq_modules emq_retainer emq_dashboard" EMQ_LOADED_PLUGINS="emq_auth_redis | emq_recon | emq_modules | emq_retainer | emq_dashboard"
以EMQ_为前缀的环境变量同样适用于所有EMQ插件的配置文件,.替换为__。
示例:
EMQ_AUTH__REDIS__SERVER <--> auth.redis.server
EMQ_AUTH__REDIS__PASSWORD <--> auth.redis.password
Docker镜像会自动查找并配置插件配置文件,无需手动指定路径。
示例:使用Redis认证插件
bashdocker run --rm -ti --name emq -p 18083:18083 -p 1883:1883 -p 4369:4369 \ -e EMQ_LISTENER__TCP__EXTERNAL=1883 \ -e EMQ_LOADED_PLUGINS="emq_auth_redis,emq_recon,emq_modules,emq_retainer,emq_dashboard" \ -e EMQ_AUTH__REDIS__SERVER="your.redis.server:6379" \ -e EMQ_AUTH__REDIS__PASSWORD="password_for_redis" \ -e EMQ_AUTH__REDIS__PASSWORD_HASH=plain \ docker.xuanyuan.run/emq:latest
可指定初始集群并加入。
注意:EMQ集群需暴露端口4369及6000-6999端口范围。
示例:使用6000-6100端口范围构建集群
bashdocker run --rm -ti --name emq -p 18083:18083 -p 1883:1883 -p 4369:4369 -p 6000-6100:6000-6100 \ -e EMQ_NAME="emq" \ -e EMQ_HOST="s2.emqtt.io" \ -e EMQ_LISTENER__TCP__EXTERNAL=1883 \ -e EMQ_JOIN_CLUSTER="emq@s1.emqtt.io" \ docker.xuanyuan.run/emq:latest
在Linux主机上,最简单的方式是http://emqttd-docs.readthedocs.io/en/latest/tune.html%E3%80%82%E8%8B%A5%E9%9C%80%E9%80%9A%E8%BF%87Docker%E8%B0%83%E4%BC%98%EF%BC%8C%E9%9C%80%E7%A1%AE%E4%BF%9DDocker%E7%89%88%E6%9C%AC%E2%89%A51.12%E3%80%82
bashdocker run --rm -ti --name emq -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 \ emq:latest
注意:不要以特权模式运行EMQ Docker或挂载系统proc到容器内进行内核调优,这是不安全的。
感谢@je-al提供环境变量映射的思路(将配置文件中的点替换为双下划线)。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 mahmoudsamy/emqx 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: