本文作者:DurkBlue

麒麟系统docker创建emqx报错Failed to create thread: Operation not permitted (1) Please ensure it is running 推荐

DurkBlue 今天 132
麒麟系统docker创建emqx报错Failed to create thread: Operation not permitted (1)  Please ensure it is running 摘要: 操作系统为: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"


麒麟系统docker创建emqx报错Failed to create thread: Operation not permitted (1)  Please ensure it is running 第1张


解决方案


这个报错不是架构不匹配,是麒麟 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)

镜像官方已支持,不是架构问题,是权限问题

此篇文章由DurkBlue发布,麻烦转载请注明来处
文章投稿或转载声明

来源:DurkBlue版权归原作者所有,转载请保留出处。本站文章发布于 今天
温馨提示:文章内容系作者个人观点,不代表DurkBlue博客对其观点赞同或支持。

赞(0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享