How to check if a Docker image with a specific tag exists locally?

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.

Leave a Comment

tech