导航菜单

容器 1 号进程(PID 1)的特殊性

陆兴东 2026-06-04 148 浏览 Docker

核心机制

要点
说明
容器本质
一个容器只运行一个应用,无完整内核,无其他系统进程
PID 1
容器内唯一的进程必须是 PID 1,相当于 Linux 的 init
信号处理
PID 1 进程默认不响应普通信号,除非显式编码处理

为什么不建议应用直接作为 PID 1

问题
后果
无法优雅停止
发送 SIGTERM 信号时,应用可能无法接收,导致只能强制 SIGKILL
kill 即重启
杀死 PID 1 等同于重启系统(容器直接退出)
僵尸进程
PID 1 不负责回收子进程,可能导致僵尸进程堆积

推荐做法

# 让 /bin/sh 作为 PID 1,应用作为子进程
CMD ["/bin/sh", "-c", "nginx -g 'daemon off;'"]
  • Shell 作为 PID 1:Shell 能正确转发信号、回收子进程
  • Nginx 例外:Nginx 支持热更新(reload),可直接作为 PID 1;但大多数应用不支持热更新,仍需通过 Shell 启动