首页/云/Docker 容器速查/PID 1 信号与僵尸进程:--init
容器排障52 条

PID 1 信号与僵尸进程:--init

容器里 PID 1 承担信号转发与孤儿进程回收:shell 当 PID 1 时常把 SIGTERM 吞掉、留下僵尸;--init 注入轻量 init 解决。

Docker 容器速查云更新于 2026-10-12
症状stop 无响应、僵尸进程、孤儿进程累积
机制PID 1 需要转发信号并 wait 子进程
方案--init / exec 形式入口 / 应用自带 init

示例

示例
docker run -d --init --name app app/base:2.0
docker exec app sh -c 'ps -eo pid,ppid,stat,comm | head -15'
docker top app | head -8
ENTRYPOINT 用 exec 形式(JSON 数组)能让应用直接成为 PID 1,比 shell 包装更干净。

易错点

  • shell 形式的 ENTRYPOINT 下信号只发给 shell,trap 没写就永远不转发
  • 既有镜像没法改入口时,--init 是代价很小的补救,但别忘它也是一个进程

数据来源与参考

  • Docker 官方 CLI 参考:docker run --init(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌