특정 태그가있는 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
나는 일반적으로 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 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
In case you are trying to search for a docker image from a docker registry, I guess the easiest way to check if a docker image is present is by using the Docker V2 REST API Tags list service
Example:-
curl $CURLOPTS -H "Authorization: Bearer $token" "https://hub.docker.com:4443/v2/your-repo-name/tags/list"
if the above result returns 200Ok with a list of image tags, then we know that image exists
{"name":"your-repo-name","tags":["1.0.0.1533677221","1.0.0.1533740305","1.0.0.1535659921","1.0.0.1535665433","latest"]}
else if you see something like
{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"your-repo-name"}}]}
then you know for sure that image doesn't exist.
Just a bit from me to very good readers:
Build
#!/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
Watch
docker logs --tail 50 --follow --timestamps smpp-gateway
Run
sudo docker exec -it \
$(sudo docker ps | grep "smpp-gateway:latest" | cut -d " " -f1) \
/bin/bash
'Programing' 카테고리의 다른 글
DownloadManager를 사용하여 활동 내에서 다운로드 진행률 표시 (0) | 2020.09.12 |
---|---|
RSpec : let과 before 블록의 차이점은 무엇입니까? (0) | 2020.09.11 |
Reactjs의 새로운 react-router-dom에서 Redirect를 사용하는 방법 (0) | 2020.09.11 |
Perl의 프린트는 어떻게 기본적으로 개행을 추가 할 수 있습니까? (0) | 2020.09.11 |
재설정을 원격 저장소에 강제로 푸시하는 방법은 무엇입니까? (0) | 2020.09.11 |