摘要:
操作系统为:Kylin Linux Advanced Server V10 (Sword) 在使用docker安装emqx:v5.10.1报错Failed to cre... 操作系统为:Kylin Linux Advanced Server V10 (Sword) 在使用docker安装emqx:v5.10.1报错Failed to create thread: Operation not permitted (1) Please ensure it is running on the correct platform: arch: "aarch64-unknown-linux-gnu"
解决方案
这个报错不是架构不匹配,是麒麟 V10 系统安全限制 + Docker 容器默认权限不足导致的,EMQ X 5.x 需要创建高优先级线程,被系统拦截了。
核心报错原因
a.ulimit 线程 / 进程数限制不足
b.CAP_SYS_NICE 权限缺失(无法调整线程优先级)
c.SELinux 拦截(麒麟 V10 默认开启)
d.容器未开启足够的系统权限
一、100% 可用启动命令(直接复制运行)
1. 先创建数据目录(授权)
mkdir -p /data/emqx/{data,log,etc}
chmod -R 777 /data/emqx
2. 启动容器(关键参数齐全)
docker run -d \
--name emqx \
--privileged \
--ulimit nofile=1048576:1048576 \
--ulimit nproc=1048576:1048576 \
--sysctl "net.core.somaxconn=32768" \
-p 1883:1883 \
-p 8083:8083 \
-p 8883:8883 \
-p 8084:8084 \
-p 18083:18083 \
-v /data/emqx/data:/opt/emqx/data:Z \
-v /data/emqx/log:/opt/emqx/log:Z \
-v /data/emqx/etc:/opt/emqx/etc:Z \
emqx:5.10.1
二、如果仍然报错(执行这一步)
临时关闭 SELinux(立即生效)
setenforce 0
做完了这些,应该可以解决问题,如果问题依旧则使用docker-compse.yml解决
能一键运行、彻底解决报错的 docker-compose.yml,适配aarch64(ARM64) + 麒麟 V10 安全限制,包含所有必须权限参数。
docker-compose.yml
version: '3.8' services: emqx: image: emqx:5.10.1 container_name: emqx restart: always privileged: true # 必须:解决线程创建权限不足 ulimits: nofile: soft: 1048576 hard: 1048576 nproc: soft: 1048576 hard: 1048576 sysctls: - net.core.somaxconn=32768 ports: - "1883:1883" - "8883:8883" - "8083:8083" - "8084:8084" - "18083:18083" volumes: - ./emqx/data:/opt/emqx/data:Z - ./emqx/log:/opt/emqx/log:Z - ./emqx/etc:/opt/emqx/etc:Z
启动前必须执行的 2 条命令(解决权限问题)
# 1. 创建目录
mkdir -p emqx/{data,log,etc}
# 2. 授权(EMQ X 容器内非 root 运行,必须授权)
chmod -R 777 emqx
# 3. 临时关闭 SELinux(麒麟V10 必须)
setenforce 0
启动命令
docker-compose up -d
查看日志
docker-compose logs -f emqx
到此为止应该解决了问题
为什么能解决
1.privileged: true
解决:Failed to create thread: Operation not permitted
2.ulimits
解除 EMQ X 高并发线程数限制
3.挂载目录加 :Z
解决麒麟 SELinux 挂载拦截
4.完全适配 aarch64 (ARM64)
镜像官方已支持,不是架构问题,是权限问题



