web-dev-qa-db-ja.com

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

特定のタグを持つ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
80
Johan

たとえば、docker inspectを試してください。

$ docker inspect --type=image treeder/hello.rb:nada
Error: No such image: treeder/hello.rb:nada
[]

しかし、今では画像が存在するので、次のような多くの情報が得られます:

$ docker inspect --type=image treeder/hello.rb:latest
[
{
    "Id": "85c5116a2835521de2c52f10ab5dda0ff002a4a12aa476c141aace9bc67f43ad",
    "Parent": "ecf63f5eb5e89e5974875da3998d72abc0d3d0e4ae2354887fffba037b356ad5",
    "Comment": "",
    "Created": "2015-09-23T22:06:38.86684783Z",
    ...
}
]

そして、それはNice json形式です。

21
Travis Reeder

tldr:

docker image inspect myimage:mytag

デモとして...

成功、見つかった画像:

$ docker image pull busybox:latest
latest: Pulling from library/busybox
Digest: sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f
Status: Image is up to date for busybox:latest

$ docker image inspect busybox:latest >/dev/null 2>&1 && echo yes || echo no
yes

失敗、画像の欠落:

$ docker image rm busybox:latest
Untagged: busybox:latest
Untagged: busybox@sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f

$ docker image inspect busybox:latest >/dev/null 2>&1 && echo yes || echo no
no

参照:

https://docs.docker.com/engine/reference/commandline/image_inspect/

14
rubicks

次のように使用できます。

[ ! -z $(docker images -q someimage:sometag) ] || echo "does not exist"

または:

[ -z $(docker images -q someimage:sometag) ] || echo "already exists"
14
Luís Bianchin

Vonc's answer の助けを借りて、check.shという名前の次のbashスクリプトを作成しました。

#!/bin/bash
image_and_tag="$1"
image_and_tag_array=(${image_and_tag//:/ })
if [[ "$(docker images ${image_and_tag_array[0]} | grep ${image_and_tag_array[1]} 2> /dev/null)" != "" ]]; then
  echo "exists"
else
  echo "doesn't exist"
fi

既存の画像とタグにそれを使用すると、existsが出力されます。次に例を示します。

./check.sh rabbitmq:3.4.4

存在しない画像とタグに使用すると、doesn't existが出力されます。例:

./check.sh rabbitmq:3.4.3
3
Johan

testを使用する

if test ! -z "$(docker images -q <name:tag>)"; then
  echo "Exist"
fi

または1行で

test ! -z "$(docker images -q <name:tag>)" &&  echo exist
2
Alex Montoya

DockerレジストリからDockerイメージを検索しようとしている場合、Dockerイメージが存在するかどうかを確認する最も簡単な方法は、 Docker V2 REST AP​​ITagslist service

例:-

curl $CURLOPTS -H "Authorization: Bearer $token" "https://hub.docker.com:4443/v2/your-repo-name/tags/list"

上記の結果が画像タグのリストとともに2000kを返す場合、画像が存在することがわかります

{"name":"your-repo-name","tags":["1.0.0.1533677221","1.0.0.1533740305","1.0.0.1535659921","1.0.0.1535665433","latest"]}

他のようなものを見たら

{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"your-repo-name"}}]} 

その画像が存在しないことが確実にわかります。

0
Abhishek J

私から非常に優れた読者の皆さんへ:

構築する

#!/bin/bash -e
docker build -t smpp-gateway smpp
(if  [ $(docker ps -a | grep smpp-gateway | cut -d " " -f1) ]; then \
  echo $(docker rm -f smpp-gateway); \
else \
  echo OK; \
fi;);
docker run --restart always -d --network="Host" --name smpp-gateway smpp-gateway:latest

時計

docker logs --tail 50 --follow --timestamps smpp-gateway

走る

Sudo docker exec -it \
$(Sudo docker ps | grep "smpp-gateway:latest" | cut -d " " -f1) \
/bin/bash
0
Artur Mustafin