みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Dev Container でゾンビプロセスに対応する

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 では開発のためにプロセスを起動することが多いので,init を利用してプロセスが適切に終了されるように設定するべきです.

*1:Docker run referenceより引用