このような場合、bashスクリプトでどのように確認しますか?
sudo docker images -q nginx
コンテナがすでに存在することを意味する結果文字列を提供します。
sudo docker images -q nginx
if [ $? != '' ]
then
echo "existing"
else
echo "missing
答え1
「Best Answer」で提案したように試みたが、コンテナのIDではなく画像のIDのみを返します。コンテナが実行されているかどうかにかかわらず、常にイメージIDを返します。docker images -q "{Image Name}"
コンテナが実行されていることを確認するには、次のコマンドを適用する必要があります。
Docker ps -q -f名前="{コンテナ名}」
コンテナが存在し、実行中の場合はコンテナIDを返します。存在しないか存在するが停止した場合は、空の文字列が返されます。すべての(実行中および停止した)コンテナを検索するには、次のように "docker ps"コマンドに "-a"パラメータを使用します。
Docker ps -a -q -f名前="{コンテナ名}」
コンテナIDなどの他のフィールドで検索することもできます。
Docker ps -a -q -f id="{コンテナID}」
詳細については、次を参照してください。公式「docker ps」ドキュメント。
答え2
$?
文字列ではありませんが、sudo
この場合は終了状態です。正しく使用するには、0と比較するか-gt
(またはなどの算術評価を実行するシェルでif (( $? ))
)使用してください。bash
ksh93
(( ... ))
コンテナイメージが存在する場合は文字列を返しsudo docker images -q nginx
、存在しない場合は何も返しません。その後、変数を保存して空であることを確認できます。
result=$( sudo docker images -q nginx )
if [[ -n "$result" ]]; then
echo 'Container image exists'
else
echo 'No such container image'
fi
ただし、ツールには通常パスワードの対話型プロンプトが必要なため、スクリプト内で使用するのは面倒で、スクリプト自体を実行するためにそれを使用する方が良いでしょうsudo
。その後、他のユーザーのIDを想定する必要がある場合にのみ、スクリプト内で使用することをお勧めします。ルート以外のユーザー)。sudo
sudo
docker inspect
コンテナ情報を確認する別のコマンド:
docker inspect -f '{{.Config.Image}}' nginx
これにより、コンテナのコンテナイメージハッシュが提供されますnginx
。また、コンテナが存在することを確認するために使用できる正しい終了ステータスを返します。
if docker inspect -f '{{.Config.Image}}' nginx >/dev/null 2>&1
then
echo 'Container image exists'
else
echo 'Container does not exist'
fi
または、出力文字列を選択して空であることを確認できます。
result=$( docker inspect -f '{{.Config.Image}}' nginx 2>/dev/null )
if [[ -n "$result" ]]; then
echo 'Container image exists'
else
echo 'No such container image'
fi
/dev/null
コンテナイメージが存在しないと文句を言うので、標準エラーストリームをリダイレクトして廃棄しました。
docker inspect
次のことを確認して、コンテナが実行中であることを確認することもできます{{.State.Running}}
。
result=$( docker inspect -f '{{.State.Running}}' nginx )
if [[ $result == "true" ]]; then
echo 'Container is running'
else
echo 'Container is not running'
fi
答え3
この試み
sudo docker inspect --format="{{.State.Running}}" $CONTAINER
# If the $CONTAINER is running or not and exists, $? is 0
# But If the $CONTAINER doesn't exist or was never created,
# $? is 1 on docker, or 125 on podman
if [ $? -eq 0 ];
then
echo "existing"
else
echo "missing"
fi