Linux 下 docker启动脚本启动一个服务启动不起来

【TDengine 使用环境】
测试

【TDengine 版本】

2.0.0.6

【操作系统以及版本】

CentOS Linux 7 (Core)

【部署方式】容器/非容器部署

Docker + Docker Compose + TDengine Apex

Docker Compose version v2.27.1

【集群节点数】

1

【集群副本数】

【描述业务影响】

【问题复现路径/shan】做过哪些操作出现的问题

使用 TDengine Apex Docker Full Deployment 部署 Enterprise 版本。

部署完成后:

TSDB Enterprise、IDMP Backend、TDgpt、TDModel、CLS、IDMP AI 等服务均正常启动。

但是 IDMP Web UI 服务 tdengine-idmp-ui 启动异常,持续 Restarting。

docker ps:

tdengine-idmp-ui Restarting (1)

日志报错:

nginx: [crit] pwrite() “/run/nginx.pid” failed (1: Operation not permitted)

尝试:

  1. 检查 Docker 用户权限;
  2. 检查 ReadonlyRootfs;
  3. 添加 tmpfs /run;
  4. 检查 SELinux;

问题仍存在。

【遇到的问题:问题现象及影响】

【资源配置】

【报错完整截图】(不要大段的粘贴报错代码,论坛直接看报错代码不直观)

常见原因有两个:

  1. 文件权限不足 — /run/nginx.pid 所有者是 root,但 nginx worker 以非 root 用户运行。检查宿主机上这个文件的权限,或者调整docker映射的启动路径
  2. SELinux / 安全模块拦截 — 这台机器是 el7 内核,大概率启用了 SELinux。nginx worker 进程的 pwrite 被 SELinux 拒绝了。关闭后试一下
1 个赞

Docker 的默认 seccomp 安全策略在 CentOS 7(内核 3.10)环境下,错误地拦截了 nginx 主进程用于写入 PID 文件所需的 pwrite 系统调用,导致 nginx 启动失败、容器反复重启。

我的解决方案是

docker-compose-tdgpt.yml 中为 tdengine-idmp-ui 服务添加 security_opt

image