특정 태그가있는 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 inspect 를 사용하는 것 입니다.
그러나 docker 17+의 경우 이미지 구문은 다음과 같습니다. docker image inspect
(존재하지 않는 이미지에서 종료 상태는 0이 아닙니다. )
- 이
docker images -q
방법은 이미지가 많은 컴퓨터에서 정말 느려질 수 있습니다. 6,500 개의 이미지 머신에서 실행하는 데 44 초가 걸립니다. docker image inspect
즉시 돌아갑니다.
답변
보십시오 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",
...
}
]
그리고 그것은 멋진 json 형식입니다.
답변
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/
답변
다음과 같이 사용할 수 있습니다.
[ ! -z $(docker images -q someimage:sometag) ] || echo "does not exist"
또는:
[ -z $(docker images -q someimage:sometag) ] || echo "already exists"
답변
위 의 Vonc 답변 의 도움으로 다음과 같은 bash 스크립트를 만들었습니다 check.sh
.
#!/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
답변
사용 test
if test ! -z "$(docker images -q <name:tag>)"; then
echo "Exist"
fi
또는 한 줄로
test ! -z "$(docker images -q <name:tag>)" && echo exist
답변
도커 레지스트리에서 도커 이미지를 검색하려는 경우 도커 이미지가 있는지 확인하는 가장 쉬운 방법은 Docker V2 REST API 태그 목록 서비스를 사용하는 것입니다.
예:-
curl $CURLOPTS -H "Authorization: Bearer $token" "https://hub.docker.com:4443/v2/your-repo-name/tags/list"
위의 결과가 이미지 태그 목록과 함께 200Ok를 반환하면 이미지가 존재하는 것입니다.
{"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"}}]}
그러면 이미지가 존재하지 않는다는 것을 확실히 알 수 있습니다.