Skip to content

fix(compose): コンテナに init: true を注入してゾンビプロセス蓄積を解消 (#28)#32

Merged
takemi-ohama merged 1 commit into
mainfrom
fix/i28-docker-init-zombie-reap
May 28, 2026
Merged

fix(compose): コンテナに init: true を注入してゾンビプロセス蓄積を解消 (#28)#32
takemi-ohama merged 1 commit into
mainfrom
fix/i28-docker-init-zombie-reap

Conversation

@takemi-ohama
Copy link
Copy Markdown
Contributor

概要

devbase コンテナの PID 1 は entrypoint の tail -f /dev/null であり orphan プロセスを reap しないため、nohup ... & disown で起動・終了したプロセスがゾンビ (<defunct>) 化して蓄積する。特に ndf:cross-reviewmonitor.py はゾンビに対しても kill -0 が成功するため「実行中」と誤判定し、hard timeout (420s) まで待たされる二次被害がある。

generate_scaled_compose() が生成する全サービスに Docker Compose の init: true を注入し、tini を PID 1 として挿入することでゾンビを自動 reap する。

関連 Issue

変更点

  • lib/devbase/volume/compose.py: generate_scaled_compose() の dev インスタンス複製ループと non-dev サービス複製ループの双方で setdefault('init', True) を注入
    • setdefault のため、プロジェクトが明示した init: false は尊重して上書きしない
    • devbase up は常に生成された .docker-compose.scale.yml 単独で docker compose up するため、scale=1 を含む全ケースを網羅 (ベース compose.yml の変更不要)
  • tests/volume/test_compose.py (新規): dev/non-dev への注入・scale>1 全インスタンス・init: false 尊重を検証

動作確認

  • pytest tests/volume/test_compose.py 3件 pass
  • pytest tests/ 全 293件 pass (リグレッションなし)
  • (要コンテナ) devbase up && devbase loginps -p 1 -o comm=tini を返す
  • (要コンテナ) nohup sleep 1 & disown; sleep 3; ps aux | grep 'Z.*defunct' がゾンビを出さない

補足

挙動の変化は「PID 1 が tini になる」のみで、entrypoint (tail -f /dev/null) は tini の子プロセスとして従来どおり動作する (後方互換)。PR_SET_CHILD_SUBREAPER 方式より単純で確実なため Docker 公式推奨の init: true を採用した。

devbase コンテナの PID 1 は entrypoint の `tail -f /dev/null` で orphan を
reap しないため、`nohup ... & disown` で起動したプロセスがゾンビ化して蓄積する。
特に cross-review の monitor.py がゾンビを「実行中」と誤判定し hard timeout まで
待たされる二次被害が出る。

generate_scaled_compose() の dev / non-dev 両サービス生成ループで
`setdefault('init', True)` を注入し、docker が tini を PID 1 に挿入するように
する。devbase up は常にこの生成ファイル単独で compose up するため scale=1 でも
網羅される。setdefault のため明示的な `init: false` は尊重する。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@takemi-ohama takemi-ohama merged commit 1517faa into main May 28, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docker コンテナにゾンビプロセスが蓄積する (init: true 未設定)

1 participant