docker-compose, how could I check if the container is running the last image? and restart it

Viewed 62

After doing pull, I am trying to check if the container is running with the last image available

with something like this

for container in $(docker-compose ps -q)
do
    oldImage=$(docker inspect $container -f "{{.Image}}" | sed 's/sha256://')
    imageName=$(docker inspect $container -f "{{.Config.Image}}")
    newImage=$(docker image inspect $imageName -f "{{.Id}}" | sed 's/sha256://')
    if [[ "$newImage" != "$oldImage" ]]; then
        echo "new image found $imageName"
        echo "new image $newImage"
        echo "old image $oldImage"
        echo "restaring ... "
    fi
done

I could check if the container's image is different from the new image available, but I don't have the service name to restart it.

Some ideas?

1 Answers

I found this solution

#!/bin/bash
set -e

for serviceName in $(docker-compose config --services)
do
    container=$(docker-compose ps -q $serviceName)
    if [[ "$container" == "" ]]; then
        continue
    fi
    oldImage=$(docker inspect $container -f "{{.Image}}" | sed 's/sha256://')
    imageName=$(docker inspect $container -f "{{.Config.Image}}")
    newImage=$(docker image inspect $imageName -f "{{.Id}}" | sed 's/sha256://')
    if [[ "$newImage" != "$oldImage" ]]; then
        echo "new image found $imageName"
        echo "new image $newImage"
        echo "old image $oldImage"
        echo "restaring ... $serviceName"
        set -v
        docker-compose stop $serviceName
        docker-compose up -d $serviceName
        set -nv
    fi
done
Related