シェルスクリプトで、dockerコンテナが起動しているかどうか確認したい場面があり処理を作成しました。
コンテナを活用している方の役に立つ部分があると思ったので、内容を説明します。
dockerコンテナのステータスを確認する
まずは、コマンドでdockerコンテナのステータスを確認する方法に関して先に説明します。
ここでは、docker inspect
コマンドを使用した方法を紹介します。
以下のコマンドは、python3
という名前のコンテナのステータスを確認する例です。
$ docker inspect --format='{{.State.Status}}' python3
exited
docker ps
コマンドを使用してステータスを取得することもできるのですが、ステータスのみを取得したい場合は、docker inspect
が使いやすいです。
$ docker ps -a | grep python3
c9de83a29262 docker_python_python3 "python3" 2 weeks ago Exited (137) 4 days ago python3
また、dockerのステータスに関しては以下の記事が大変参考になりましたので、興味のある方はご覧ください。
参考:[Docker入門] Dockerコンテナのステータスを調べてみよう
作成したシェルスクリプト
コンテナを実行している状態の場合は正常終了し、そうでない場合は異常終了させる処理を書きました。
#!/bin/bash
#######################################
# コンテナを起動できなかった場合、終了する
#######################################
EXIT_IF_CONTAINER_NOT_RUNNING() {
docker_status=$(docker inspect --format='{{.State.Status}}' $1)
echo "$1: $docker_status"
if [[ "$docker_status" != "running" ]]; then
echo "This container is not running"
exit 1
fi
}
EXIT_IF_CONTAINER_NOT_RUNNING "python3"
echo "finished"
実行結果: コンテナを実行している状態の場合
running
の状態であり、スクリプトが正常終了していることが分かります。
$ bash check_docker_status.sh
python3: running
finished
実行結果: コンテナを実行していない場合
exited
(コンテナが終了している状態)では、スクリプトが失敗していることが分かります。
$ bash check_docker_status.sh
python3: exited
This container is not running
処理の説明
関数部分
引数としてコンテナ名を受け取り、ステータスがrunning
でなければ処理を終了させています。
関数として定義することで、1つのコンテナだけではなく他のコンテナのステータスを確認したい場合にも汎用的に活用できるようにしています。
#######################################
# コンテナを起動できなかった場合、終了する
#######################################
EXIT_IF_CONTAINER_NOT_RUNNING() {
docker_status=$(docker inspect --format='{{.State.Status}}' $1)
echo "$1: $docker_status"
if [[ "$docker_status" != "running" ]]; then
echo "This container is not running"
exit 1
fi
}
処理実行部分
第一引数にコンテナ名を渡して、処理を実行しています。
(コンテナ名は、docker ps
等で確認できます。)
EXIT_IF_CONTAINER_NOT_RUNNING "python3"
まとめ
シェルスクリプトで、dockerコンテナのステータスを確認する処理を書く方法に関して説明しました。
読んで頂いた方の参考になっていれば幸いです。
コメント