本文作者:DurkBlue

麒麟系统当中docker安装tdengine容器报错TFS ERROR failed to mount /var/lib/taos/ to FS since Operation not permitt推荐

DurkBlue 今天 132
麒麟系统当中docker安装tdengine容器报错TFS ERROR failed to mount /var/lib/taos/ to FS since Operation not permitt摘要:    操作系统为:Kylin Linux Advanced Server V10 (Sword)  在使用docker安装tdengine报错TFS...

   操作系统为:Kylin Linux Advanced Server V10 (Sword)  在使用docker安装tdengine报错TFS ERROR failed to mount /var/lib/taos/ to FS since Operation not permitt

DND ERRORfailed to init tfs since Operation not permitted     DND ERROR failed to init dnode since Operation not permitted


麒麟系统当中docker安装tdengine容器报错TFS ERROR failed to mount /var/lib/taos/ FS since Operation not permitt  第1张


解决方式:


该报错是SELinux 强制拦截挂载+容器权限不足+挂载目录属主 / 标签不匹配共同导致的,在银河麒麟 V10(Kylin Linux Advanced Server V10)上非常典型。

下面给你可直接执行的分步解决方案。

一、问题根因

  • a. SELinux 强制模式:麒麟 V10 默认 SELinux=enforcing,阻止容器把宿主机目录挂载为容器私有 FS(TDengine 内部 TFS 需要)。

  • b.挂载缺少 SELinux 标签:Z:Docker bind mount 未加:Z,宿主机目录上下文未转为container_file_t,被 SELinux 拒绝。

  • c.容器非 root 权限不足:TDengine 3.x 默认用 UID=1001(taos),宿主机目录属主 root 且权限过严,无法写入。

  • d.未开特权 / 能力:挂载内核文件系统需要CAP_SYS_ADMIN,普通容器默认没有。


二、快速解决(推荐,优先执行)

1. 临时关闭 SELinux(当前会话生效)


# 检查状态(应显示enforcing)
getenforce

# 设为宽容模式
sudo setenforce 0

# 验证(显示permissive)
getenforce



2. 修正挂载命令(加:Z + 特权 + 正确权限)

假设宿主机目录为/data/taos/{data,log},执行:


# 1. 准备目录并授权给UID 1001(taos)
sudo mkdir -p /data/taos/data /data/taos/log
sudo chown -R 1001:1001 /data/taos
sudo chmod -R 775 /data/taos

# 2. 启动容器(关键::Z + --privileged + 正确挂载)
docker run -d \
  --name tdengine \
  --privileged \
  -v /data/taos/data:/var/lib/taos:Z \
  -v /data/taos/log:/var/log/taos:Z \
  -p 6030:6030 -p 6041:6041 \
  tdengine/tdengine:3.3.2.0


3. 若用 docker-compose.yml

version: "3"
services:
  tdengine:
    image: tdengine/tdengine:3.3.2.0
    container_name: tdengine
    privileged: true
    volumes:
      - /data/taos/data:/var/lib/taos:Z
      - /data/taos/log:/var/log/taos:Z
    ports:
      - "6030:6030"
      - "6041:6041"
    restart: always


三、永久关闭 SELinux(生产环境可选,信创常用)


sudo vi /etc/selinux/config
# 修改为:
SELINUX=disabled

# 重启系统生效
sudo reboot

四、关键细节说明

a.:Z 参数:Docker 自动重新标记宿主机目录为container_file_t,允许容器读写。

b. --privileged:授予容器CAP_SYS_ADMIN,满足 TFS 挂载内核文件系统需求。

c. UID 1001:TDengine 容器内 taos 用户默认 UID=1001,宿主机目录必须归属此 UID,否则权限拒绝。

d.SELinux 日志排查:若仍报错,查看 SELinux 拒绝日志:


sudo ausearch -m avc -ts recent


五、验证是否解决


# 查看容器日志,无TFS ERROR即成功
docker logs tdengine
# 进入容器验证
docker exec -it tdengine bash
ls -ld /var/lib/taos  # 属主应为taos(1001)







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

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

赞(0)

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

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享