Issue
I'd like to find out if a Docker image with a specific tag exists locally. I'm fine by using a bash script if the Docker client cannot do this natively.
Just to provide some hints for a potential bash script the result of running the docker images
command returns the following:
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
Solution
I usually test the result of docker images -q
(as in this script):
if [ -z "$(docker images -q myimage:mytag 2> /dev/null)" ]; then
# do something
fi
On Powershell (comment from Garret Wilson):
if (!(docker images -q myimage:mytag 2> $null)) {
# do something
}
But since .docker images
only takes REPOSITORY
as parameter, you would need to grep on tag, without using -q
docker images
takes tags now (docker 1.8+) [REPOSITORY[:TAG]]
The other approach mentioned below is to use docker inspect.
But with docker 17+, the syntax for images is: docker image inspect
(on an non-existent image, the exit status will be non-0)
As noted by iTayb in the comments:
- The
docker images -q
method can get really slow on a machine with lots of images. It takes 44s to run on a 6,500 images machine. - The
docker image inspect
returns immediately.
As noted in the comments by Henry Blyth:
If you use
docker image inspect my_image:my_tag
, and you want to ignore the output, you can add--format="ignore me"
and it will print that literally.You can also redirect stdout by adding
>/dev/null
but, if you can't do that in your script, then the format option works cleanly.
Answered By - VonC Answer Checked By - Katrina (WPSolving Volunteer)