标准答案

  1. 前台主进程退出时容器可以明确结束,运行时和 supervisor 能根据退出码执行重启或告警。
  2. 应用后台化后,启动脚本可能已经退出但服务仍在运行,容器状态会与真实服务状态脱节。
  3. 主进程应接收 SIGTERM、停止接收新工作并完成排空;需要多进程时应使用明确的进程管理器或拆分容器职责。
  4. 日志应输出到标准输出和标准错误,交给容器日志系统收集,而不是依赖容器内无人管理的后台日志文件。

题目解析

容器运行时通常把主进程作为生命周期和健康状态的依据,前台运行可以让它直接接收信号、输出日志并暴露退出码。一个容器只放一个主要服务是便于管理的默认建议,但需要 tightly coupled 的辅助进程时也可以组合,前提是有明确的进程监督、日志和资源边界。

在容器里用 nohup、& 或 daemon 模式把服务放到后台,会让 PID 1 过早退出或无法感知子进程状态。多进程容器若确有必要,应使用能正确转发信号、回收子进程并报告任一关键进程失败的 supervisor,并测试部分失败和停机。

常见误区

  • 误区:使用 nohup、& 或 daemon 模式启动服务。改正:让主服务以前台方式运行,或使用明确的进程管理器。
  • 误区:只检查 shell 脚本退出码。改正:检查实际业务主进程、子进程、日志、健康和退出传播。

作者信息