
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
从v5.9.0开始,EMQX已将先前开源版和企业版的所有功能统一到单一强大产品中,并采用商业源代码许可证(BSL)1.1。
如果您想了解我们做出此变更的原因,请阅读这篇博客文章;如果您想了解有关新许可证的更多信息,请阅读EMQX许可常见问题。
因此,我们停止发布emqx Docker官方镜像。EMQX v5.9.0+将仅在https://hub.docker.com/r/emqx/emqx%E5%92%8Chttps://hub.docker.com/r/emqx/emqx-enterprise Docker Hub仓库中提供。
维护者:
https://github.com/emqx
获取帮助:
https://github.com/emqx/emqx/discussions 或 ***
Dockerfile链接https://github.com/emqx/emqx-docker/blob/35e70c8e602687db5a447c9573bde8ab77335fdc/5.7/Dockerfile
https://github.com/emqx/emqx-docker/blob/cddc2e939a0ec978fb381aaed4bf2cd172c625f6/5.8/Dockerfile
文件问题的位置:
https://github.com/emqx/emqx-docker/issues?q=
支持的架构:(https://github.com/docker-library/official-images#architectures-other-than-amd64)
https://hub.docker.com/r/amd64/emqx/, https://hub.docker.com/r/arm64v8/emqx/
已发布镜像制品详情:
https://github.com/docker-library/repo-info/blob/master/repos/emqx (https://github.com/docker-library/repo-info/commits/master/repos/emqx)
(镜像元数据、传输大小等)
镜像更新:
https://github.com/docker-library/official-images/issues?q=label%3Alibrary%2Femqx
https://github.com/docker-library/official-images/blob/master/library/emqx (https://github.com/docker-library/official-images/commits/master/library/emqx)
此描述的来源:
https://github.com/docker-library/docs/tree/master/emqx (https://github.com/docker-library/docs/commits/master/emqx)
EMQX是世界上最具可扩展性的开源MQTT代理,具有高性能,可在1个集群中连接1亿+ IoT设备,同时保持1M消息/秒的吞吐量和亚毫秒级延迟。
EMQX支持多种开放标准协议,如MQTT、HTTP、QUIC和WebSocket。它100%符合MQTT 5.0和3.x标准,并通过MQTT over TLS/SSL和各种认证机制确保双向通信安全。
借助内置强大的基于SQL的规则引擎,EMQX可以实时提取、过滤、丰富和转换IoT数据。此外,它通过无主分布式架构确保高可用性和水平可扩展性,并提供对运维友好的用户体验和出色的可观测性。
EMQX在50多个国家和地区拥有超过20K+企业用户,连接全球1亿+ IoT设备,受到400多家客户在IoT、IIoT、联网车辆等关键任务场景中的信任,包括70多家财富500强公司,如HPE、VMware、Verifone、上汽大众和爱立信。
!https://raw.githubusercontent.com/docker-library/docs/68aa4264fa058f323993fdaceacd63a8acbbeb48/emqx/logo.svg?sanitize=true
在该docker镜像下执行一些命令
console$ docker run -d --name emqx arm64v8/emqx:${tag}
例如
console$ docker run -d --name emqx -p 18083:18083 -p 1883:1883 arm64v8/emqx:latest
EMQX代理在docker容器中以Linux用户emqx运行。
https://github.com/emqx/emqx/blob/master/apps/emqx/etc/emqx.conf%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89EMQX%E9%85%8D%E7%BD%AE%E9%83%BD%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE%E3%80%82
示例:
EMQX_DASHBOARD__DEFAULT_PASSWORD <--> dashboard.default_password EMQX_NODE__COOKIE <--> node.cookie EMQX_LISTENERS__SSL__default__ENABLE <--> listeners.ssl.default.enable
注意:此处使用小写的'default'并非拼写错误。它用于演示小写环境变量是等效的。
EMQX___替换为.例如,将MQTT TCP端口设置为1883
console$ docker run -d --name emqx -e EMQX_DASHBOARD__DEFAULT_PASSWORD=mysecret -p 18083:18083 -p 1883:1883 arm64v8/emqx:latest
请在官方文档中阅读更多关于EMQX配置的信息
EMQX节点名称配置
环境变量EMQX_NODE__NAME允许您指定EMQX节点名称,默认为<container_name>@<container_ip>。
如果未指定,EMQX会根据运行环境或用于节点发现的其他环境变量确定其节点名称。
EMQX支持多种集群方式,详情请参见我们的文档。
让我们通过Docker Compose创建一个静态节点列表集群。
compose.yaml:yamlservices: emqx1: image: arm64v8/emqx:latest environment: - "EMQX_NODE__NAME=emqx@node1.emqx.io" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io, emqx@node2.emqx.io]" networks: emqx-bridge: aliases: - node1.emqx.io emqx2: image: arm64v8/emqx:latest environment: - "EMQX_NODE__NAME=emqx@node2.emqx.io" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=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/log由于这些文件夹中的数据部分存储在/opt/emqx/data/mnesia/${node_name}下,用户还需要重用相同的节点名称才能看到之前的状态。要使其工作,需要将EMQX_NODE__NAME的主机部分设置为静态值,该值在重启或重新创建容器时不会更改。它可以是容器名称、主机名或回环IP地址127.0.0.1(如果只有一个节点)。
如果使用Docker Compose,配置如下所示:
YAMLvolumes: vol-emqx-data: name: foo-emqx-data vol-emqx-log: name: foo-emqx-log services: emqx: image: arm64v8/emqx:latest restart: always environment: EMQX_NODE__NAME: foo_emqx@127.0.0.1 volumes: - vol-emqx-data:/opt/emqx/data - vol-emqx-log:/opt/emqx/log
在Linux主机上,最简单的方法是调优指南。
如果要通过docker调优Linux内核,必须确保docker是最新版本(>=1.12)。
bashdocker run -d --name emqx -p 18083:18083 -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=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 \ arm64v8/emqx:latest
注意:不要以特权模式运行EMQX docker或将系统proc挂载到容器中以调优Linux内核,这是不安全的。
查看此镜像中包含的软件的https://github.com/emqx/emqx/blob/master/LICENSE%E3%80%82
与所有Docker镜像一样,这些镜像可能还包含其他软件,这些软件可能受其他许可证(如基础发行版中的Bash等,以及主要软件的任何直接或间接依赖项)约束。
一些能够自动检测到的额外许可证信息可能会在https://github.com/docker-library/repo-info/tree/master/repos/emqx%E4%B8%AD%E6%89%BE%E5%88%B0%E3%80%82
至于任何预构建镜像的使用,镜像用户有责任确保对该镜像的任何使用都符合其中包含的所有软件的相关许可证。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 arm64v8/emqx 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: