Files
docker_dev/bash/update_all_docker_containers.sh
2025-09-20 16:11:47 +02:00

41 lines
1.6 KiB
Bash

#!/usr/bin/env bash
set -e
# Function to preserve and update container
preserve_and_update_container() {
local container=$1
local image=$(docker inspect --format '{{.Config.Image}}' "$container")
# Pull the latest image version
docker pull $image
# Compare image IDs to determine if an update is needed
local latest_image_id=$(docker inspect --format '{{.Id}}' $image)
local container_image_id=$(docker inspect --format '{{.Image}}' "$container")
if [[ "$latest_image_id" != "$container_image_id" ]]; then
echo "Updating $container..."
# Capture current configurations
local env_vars=$(docker inspect $container --format '{{range .Config.Env}}{{println .}}{{end}}')
local volumes=$(docker inspect $container --format '{{range .Mounts}}{{println .Source ":" .Destination}}{{end}}')
local network=$(docker network ls --filter id=$(docker inspect $container --format '{{.HostConfig.NetworkMode}}') --format '{{.Name}}')
# Remove the outdated container
docker rm -f $container
# Recreate the container with the same configurations
docker run -d --name $container $(echo "$env_vars" | xargs -I {} echo --env '{}') $(echo "$volumes" | xargs -I {} echo -v '{}') --network="$network" $image
echo "$container updated successfully."
else
echo "$container is already up to date."
fi
}
# Iterate over all running containers
for container in $(docker ps --format "{{.Names}}"); do
preserve_and_update_container $container
done
echo "Container update check complete while preserving existing container configurations."