1. ホーム
  2. bash

[解決済み] 特定のタグを持つDockerイメージがローカルに存在するかどうかを確認する方法は?

2022-04-27 01:45:06

質問

特定のタグを持つDockerイメージがローカルに存在するかどうかを調べたいのですが、どうすればいいですか?Dockerクライアントがネイティブでこれを行えない場合、私はbashスクリプトを使用してもかまいません。

bashスクリプトのヒントになるように docker images コマンドは以下を返します。

REPOSITORY                               TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
rabbitmq                                 latest              e8e654c05c91        5 weeks ago         143.5 MB
busybox                                  latest              8c2e06607696        6 weeks ago         2.433 MB
rabbitmq                                 3.4.4               a4fbaad9f996        11 weeks ago        131.5 MB

解決方法は?

私は通常 docker images -q (のように このスクリプト ):

if [[ "$(docker images -q myimage:mytag 2> /dev/null)" == "" ]]; then
  # do something
fi

しかし から docker images を取るだけです。 REPOSITORY をパラメータとして使用する場合は、タグを grep する必要があります。 -q .

docker images がタグを取るようになりました (docker 1.8+) [REPOSITORY[:TAG]]

後述するもう一つの方法は ドッカーインスペクト .

しかし、docker 17+では、イメージの構文が。 docker image inspect (存在しない画像上では 終了ステータスは非0になります )

にあるように iTayb コメント :

  • docker images -q メソッドは、たくさんの画像を扱うマシンでは非常に遅くなることがあります。6,500画像のマシンで実行すると44秒かかります。
  • その docker image inspect はすぐに返されます。

のコメントにもあるように ヘンリー・ブライス :

を使用する場合 docker image inspect my_image:my_tag を追加し、出力を無視することができます。 --format="ignore me" という文字が表示されます。

また、標準出力をリダイレクトするために >/dev/null が、スクリプト内でそれができない場合は、formatオプションがきれいに動作します。