SSH Loginしたサーバ上でdocker runでプロセスを動かしている時に、sshのconnectionが切れるとdocker processが動きっぱなしになる現象が発生しました。
具体的には次のような感じです。
ssh server |
通常であればsshが切断されると全てのプロセスが終了するはずですが、何故かdocker processが残ってしましました。これは、次のようにdocker runの実際のプロセスがdockerdの下にぶら下がっているからだと思います。hoge.shは終了しますが、docker-containerd-shim
のtreeの方は終了しません。fuga.rbの方にはシグナルは何も飛んできませんでした。
ssh |
特殊なシグナルは飛びませんがhoge.sh自体は終了するので、hoge.shに次のコードを仕込んで解決しました。
cidfile="$(mktemp --dry-run "/tmp/nodelist.tmp.XXXXXXXXXX")" |
docker run --rm -it --cidfile="${cidfile}" xxx ruby fuga.rb |
trapしなくても普通にdocker runの後のexit codeを見ても良かったかな 🤔