PR

【シェルスクリプト】dockerコンテナが起動しているか確認する方法

Docker
記事内に広告が含まれています。

シェルスクリプトで、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コンテナのステータスを確認する処理を書く方法に関して説明しました。
読んで頂いた方の参考になっていれば幸いです。

コメント

タイトルとURLをコピーしました