Last active
March 1, 2024 13:35
-
-
Save outofcoffee/8f40732aefacfded14cce8a45f6e5eb1 to your computer and use it in GitHub Desktop.
Check if Docker image exists with tag in AWS ECR
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# Example: | |
# ./find-ecr-image.sh foo/bar mytag | |
if [[ $# -lt 2 ]]; then | |
echo "Usage: $( basename $0 ) <repository-name> <image-tag>" | |
exit 1 | |
fi | |
IMAGE_META="$( aws ecr describe-images --repository-name=$1 --image-ids=imageTag=$2 2> /dev/null )" | |
if [[ $? == 0 ]]; then | |
IMAGE_TAGS="$( echo ${IMAGE_META} | jq '.imageDetails[0].imageTags[0]' -r )" | |
echo "$1:$2 found" | |
else | |
echo "$1:$2 not found" | |
exit 1 | |
fi |
Thanks for this script!
I've expanded it to include support for public repositories, using the
-p
or--public
flag and incorporated the usage block from @jeevanshu
aws ecr-public
commands only work in us-east-1
region, therefore the correct command should be
IMAGE_META="$( aws ecr-public --region=us-east-1 describe-images --repository-name=$1 --image-ids=imageTag=$2 2> /dev/null )"
IMAGE_META="$( aws ecr batch-get-image --repository-name=$REPOSITORY --image-ids=imageTag=$IMAGE_TAG --query 'images[].imageId.imageTag' --output text )"
if [[ $IMAGE_META == $IMAGE_TAG ]]; then
echo "$IMAGE_META found skipping build"
else
echo "$REPOSITORY:$IMAGE_TAG not found, building new image"
docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG .
docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG
fi
This way is working for me, thanks for the help
@jeremiahlukus, thanks this does work for me π
Thanks, AWS CLI goes out of it's way to make things less obvious -
π π π
IMAGE_META="$( aws ecr batch-get-image --repository-name=$REPOSITORY --image-ids=imageTag=$IMAGE_TAG --query 'images[].imageId.imageTag' --output text )" if [[ $IMAGE_META == $IMAGE_TAG ]]; then echo "$IMAGE_META found skipping build" else echo "$REPOSITORY:$IMAGE_TAG not found, building new image" docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG . docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG fi
This way is working for me, thanks for the help
@jeremiahlukus thanks a lot! It works really well!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The following would push only if the image with the tag does not exist.
aws ecr list-images --repository-name ${REPO_NAME} --query "imageIds[?imageTag=='${GIT_SHA1}'].imageTag" --output text | docker push ${AWSACCOUNTID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${REPO_NAME}:${GIT_SHA1}