Wie kann man das Stoppen/Starten von Containern automatisieren?

Ich verwende Portainer zur Verwaltung von Docker-Containern und habe einen Stack namens XYZ (bestehend aus 4 Containern) bereitgestellt. Ich muss ein Backup des gesamten Stacks erstellen, und der gesamte Stack muss während des Backups gestoppt werden. Wie kann ich das Stoppen und Starten des gesamten Stacks automatisieren?

Danke :slight_smile:

Da ich die Portainer Community Edition zur Verwaltung meiner Container verwende, konnte ich keine nützlichen Funktionen finden. Daher musste ich Immich aus Portainer entfernen und es in Qnap Container Station neu bereitstellen. Der Rest des Prozesses wird mit Shell-Skripten und Qnap-Speichersnapshots durchgeführt. Die Skripte werden über crontab geplant ausgeführt. Hier sind die Skripte und die einzelnen Schritte:

1. Skript zum Stoppen des Immich-Stacks erstellen:

#!/bin/bash
#
# Stoppt Container, um einen QNAP-Snapshot zu erstellen
#

# PATH setzen, damit das QNAP-Docker-Binary gefunden wird
export PATH=/share/ZFS530_DATA/.qpkg/container-station/bin:$PATH
export HOME=/root

# Optional: Vollständigen Pfad verwenden, um 100% sicher zu sein
DOCKER_BIN=/share/ZFS530_DATA/.qpkg/container-station/bin/docker

# Alle Immich-Container stoppen
$DOCKER_BIN stop $($DOCKER_BIN ps -q --filter "name=Immich")

2. Skript zum Starten des Immich-Stacks erstellen:

#!/bin/bash
#
# Stoppt Container, um einen QNAP-Snapshot zu erstellen
#

# PATH setzen, damit das QNAP-Docker-Binary gefunden wird
export PATH=/share/ZFS530_DATA/.qpkg/container-station/bin:$PATH
export HOME=/root

# Optional: Vollständigen Pfad verwenden, um 100% sicher zu sein
DOCKER_BIN=/share/ZFS530_DATA/.qpkg/container-station/bin/docker

# Alle Immich-Container starten
$DOCKER_BIN start $($DOCKER_BIN ps -a -q --filter "name=Immich")

Falls du das Bridge-Netzwerk zum Immich-Server-Container hinzufügen musst, damit er über Cloudflare erreichbar ist, füge Folgendes ans Ende des Startskripts hinzu:

# 30 Sekunden warten
sleep 30

# Bridge-Netzwerk zum Immich-Server-Container hinzufügen
$DOCKER_BIN network connect bridge Immich-Server

3. Crontab-Eintrag für die Stop- und Startskripte erstellen:

0 1 * * * /bin/sh /share/Scripts/Qnap/stop_containers.sh >> /share/Scripts/Logs/crontab_stop_container.log 2>&1
5 1 * * * /bin/sh /share/Scripts/Qnap/start_containers.sh >> /share/Scripts/Logs/crontab_start_container.log 2>&1

4. Einen geplanten Snapshot erstellen, der zeitlich zu den Start-/Stop-Skripten im Crontab passt

Optional: Repliziere deinen Snapshot auf ein anderes NAS.

Ich hoffe, das ist für jemanden hilfreich. :slight_smile:

Ich habe auch diesen Artikel darüber gefunden, wie man Container automatisch startet.