Dev Container を使用していると,ゾンビプロセスが大量発生することに気づきましたので,init を有効にすることで解決しました.
現象
htop
コマンドで確認すると,10個以上のゾンビプロセスが発生しています.
解決方法
Docker container で init
を最初に実行するようにして,プロセスを適切に終了するように設定します.
Specify an init process
You can use the --init flag to indicate that an init process should be used as the PID 1 in the container. Specifying an init process ensures the usual responsibilities of an init system, such as reaping zombie processes, are performed inside the created container.
The default init process used is the first docker-init executable found in the system path of the Docker daemon process. This docker-init binary, included in the default installation, is backed by tini. *1
tini は非常に軽量な init で,プロセスを終了してシグナルを伝達します.
GitHub - krallin/tini: A tiny but valid `init` for containers
docker-compose ならば以下のように init: true
を指定します.
version: "3.9" services: web: image: alpine:latest init: true
devcontainer.json ならば,以下のように init: true
を指定します.
{ "init": true ... }
- Dev Container metadata reference
- vscode-dev-containers/desktop-lite.md at main · microsoft/vscode-dev-containers · GitHub
Dev Container では開発のためにプロセスを起動することが多いので,init を利用してプロセスが適切に終了されるように設定するべきです.