1コンテナに1プロセス
Dockerは1コンテナに1プロセスが基本です。
そのためコマンドで起動したプロセスから別プロセスを起動しない方がよいのは前提です。
Dockerのzombieのメカニズム
こちらに詳しいです。
http://blog.kechako.com/entry/2015/05/27/210459
initプロセスに相当するものが要因と理解しました。
Dockerのinit
こちらのコメントに良い情報がありました。
https://qiita.com/mumoshu/items/064cd93ce116d8e04169#comment-b530f8d6fbce1ed62d9f
Docker --initオプション
docker-composeの場合は2.2以降で
init: true
で設定できます。
3系では未対応のようです。
ps -ef
--initオプションを設定すると
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:02 ? 00:00:00 /dev/init -- bash -c xxxxxx
/dev/init でコマンドが実行されて、
コマンドで起動したプロセスのサブプロセスを回収してくれます。