Docker: コンテナが停止したときにホスト上でスクリプトを起動するにはどうすればよいですか?

Docker: コンテナが停止したときにホスト上でスクリプトを起動するにはどうすればよいですか?

Docker コンテナが停止しているときにホスト上で bash スクリプトを起動できるかどうかを知りたいです。

たとえば、コンテナが停止したときにサービスを停止したいとします。

SIGTERM シグナルをキャッチすることは可能で、コンテナ内でいくつかの bash コマンドを実行できることがわかりました。ホスト マシンで SIGTERM シグナルをキャッチしてスクリプトを起動する方法があるかもしれません...

答え1

試すdocker イベント適切なフィルターを使用する。すなわち

$ docker events --filter 'container=alpine-bash' --filter 'event=stop'
> 2019-07-26T17:25:35.944807432+04:00 container stop 5db8ba01c4ca26b4417bd080d9022b74893a865eefe22dc987f8d18fda104f39 (image=yikaus/alpine-bash, name=alpine-bash)

答え2

次のコマンドを使用できますdocker container wait:

$ docker container wait --help

Usage:  docker container wait CONTAINER [CONTAINER...]

Block until one or more containers stop, then print their exit codes

使用例は次のようになります。

$ docker run -d --rm --name test-wait busybox sleep 10
9ca77ac5121690110e8fdf58e73583918fa9b1a5de56ab89eb70cc89be97f3fa

$ docker container wait test-wait
0

2 番目のコマンドは、コンテナの sleep コマンドが完了するまでハングしました。

関連情報