In this article I want to paste a code snippet which is checking it’s filtered subfolders for docker-compose files and pulls and ups automagically.

Here it is!

#!/bin/bash

# our docker base folder
DOCKER_BASE_DIR="/home/user/docker"
# folders to exclude from udpate
DIRS_TO_EXCLUDE=("code" "snacklish" "nginx-proxy" "psono")
# docker-compose binary location
DC=$(which docker-compose)

cd ${DOCKER_BASE_DIR}
for D in *; do
    # if is directory and not excluded
    if ([ -d "${D}" ] && [[ ! " ${DIRS_TO_EXCLUDE[@]} " =~ " ${D} " ]]); then
        cd ${D}
        echo "I am in $(pwd)"
        if [ -f "./docker-compose.yaml" ]; then
            echo "I found a docker-compose.yaml, updating ..."
            ${DC} pull && ${DC} up -d && cd ..
        else
            echo "No docker-compose.yaml found, stepping back"
            cd ..
        fi
    fi
done

Oriented on Selenium acceptance tests, I have designed the output to be as readable and as debuggable as possible.

user@host ~/docker % ./update-all.sh

I am in /home/user/docker/gitlab
I found a docker-compose.yaml, updating ...
Pulling gitlab ... done
Recreating gitlab ... done
I am in /home/user/docker/mailcow
No docker-compose.yaml found, stepping back
I am in /home/user/docker/traefik
I found a docker-compose.yaml, updating ...
Pulling traefik ... done
traefik_traefik_1 is up-to-date