Son aktivite 1 month ago

Restart des container declarant /var/run/docker.sock dasn le compose .

Revizyon 628e5d1815090b7172dd3ed2cbb5f97e98bb28ba

docker-systemd-sock-restartauto.md Ham

Redémarrage automatique des containers utilisant docker.sock

Problème

Lors d’une mise à jour Docker :

  • dockerd redémarre
  • le socket /var/run/docker.sock est recréé
  • les containers qui l’utilisent (Portainer, Dozzle, Telegraf, etc.) restent UP mais ne fonctionnent plus
  • docker compose down/up corrige car il recrée tout

Solution

Redémarrer automatiquement uniquement les containers qui montent /var/run/docker.sock, juste après le redémarrage de Docker.


1. Script de détection + restart

Créer le script :

mkdir -p /home/tools/SH

cat > /home/tools/SH/docker-restart-sock.sh <<'EOF'
#!/bin/sh

printf "%-20s %-30s %-18s %-10s\n" "CONTAINER" "IMAGE" "RESTART" "UP(s)"

for id in $(docker ps -aq); do
  if docker inspect -f '{{range .Mounts}}{{.Source}}{{end}}' "$id" \
     | grep -q '/var/run/docker.sock'; then

    name=$(docker inspect -f '{{.Name}}' "$id" | sed 's#^/##')
    image=$(docker inspect -f '{{.Config.Image}}' "$id")
    restartp=$(docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' "$id")

    docker restart "$id" >/dev/null 2>&1

    start=$(docker inspect -f '{{.State.StartedAt}}' "$id")
    now=$(date -u +"%Y-%m-%dT%H:%M:%S.%NZ")
    up=$(($(date -d "$now" +%s) - $(date -d "$start" +%s)))

    printf "%-20s %-30s %-18s %-10s\n" "$name" "$image" "$restartp" "$up"
  fi
done
EOF