"docker stop Duplicati" führt zu Docker unerwartet gestoppt

pipsen

Benutzer
Mitglied seit
03. Dez 2020
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
Hi,

ich habe einen Docker Container "Duplicati" am NAS, was Nachts um 2 Uhr, 3 Uhr und 4 Uhr einen Backup Job auf eine lokal angeschlossene USB Festplatte startet. Über zwei cronjobs passiert folgendes:

01:00 Uhr: mount USB Festplatte + docker start Duplicati
05:00 Uhr: docker stop Duplicati + eject USB Festplatte

Technisch funktioniert das auch perfekt, aber ich bekomme jeden Morgen die Meldung im DSM und per eMail:
Docker-Container Duplicati wurde unerwartet gestoppt. Weitere Informationen finden Sie unter Docker.

Im Docker log steht:
05:00:01 [cont-finish.d] executing container finish scripts
05:00:01 [cont-finish.d] done .
05:00:01 [s6-finish] waiting for services.
05:00:01 [s6-finish] sending all processes the TERM signal.
05:00:04 [s6-finish] sending all processes the KILL signal and exiting

Interessant ist:
Wenn den Container manuell in der Docker GUI vom DSM stoppe, passiert das nicht. Gibts vielleicht einen syno-command im Terminal, womit ich den Container mehr "graceful" beenden kann?

Dankeschön für eure Hilfe!
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.476
Punkte für Reaktionen
359
Punkte
103
Klar, wenn man es durch die Docker-UI der Syno stoppt, dann bekommt sie es auch mit. Aus ihrer Sicht ist es unerwartet, dass ein Container direkt über den Docker Cli-Client beendet wird.

Hiermit müsste es ohne Fehlermeldung funktionieren:
Code:
synowebapi --exec api=SYNO.Docker.Container version=1 method=stop name="${CONTAINER_NAME}"
synowebapi --exec api=SYNO.Docker.Container version=1 method=start name="${CONTAINER_NAME}"
 

pipsen

Benutzer
Mitglied seit
03. Dez 2020
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
MEGA COOL! Vielen lieben Dank... works like a charm - genau das hab ich gesucht!
 

pipsen

Benutzer
Mitglied seit
03. Dez 2020
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
Klar, wenn man es durch die Docker-UI der Syno stoppt, dann bekommt sie es auch mit. Aus ihrer Sicht ist es unerwartet, dass ein Container direkt über den Docker Cli-Client beendet wird.

Hiermit müsste es ohne Fehlermeldung funktionieren:
Code:
synowebapi --exec api=SYNO.Docker.Container version=1 method=stop name="${CONTAINER_NAME}"
synowebapi --exec api=SYNO.Docker.Container version=1 method=start name="${CONTAINER_NAME}"
Da du dich mit der DSM API sehr gut auskennst.. vielleicht hast du ja noch eine elegantere Methode im Kopf, wie man den Eject / Remount einer anschlossenen USB Festplatte hinbekommt? Momentan mach ich das so:

Unmount:
Code:
/usr/syno/bin/synousbdisk -rcclean
/usr/syno/bin/synousbdisk -umount /dev/sdq
umount /volumeUSB1/usbshare1-1
umount /volumeUSB1/usbshare1-2
echo "4-2" > /sys/bus/usb/drivers/usb/unbind
rmdir /volumeUSB1/usbshare1-1 /volumeUSB1/usbshare1-2

Mount:
Code:
echo "4-2" > /sys/bus/usb/drivers/usb/bind
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.476
Punkte für Reaktionen
359
Punkte
103

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.101
Punkte für Reaktionen
253
Punkte
129
Danke @haydibe. Danach habe ich schon länger gesucht.

In der offiziellen syno community wurde das auch mal gefragt, dort wurde es leider noch nicht gelöst 👍🏻
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.476
Punkte für Reaktionen
359
Punkte
103
Zuletzt bearbeitet:
  • Like
Reaktionen: EDvonSchleck

Horst22

Benutzer
Mitglied seit
07. Jun 2022
Beiträge
27
Punkte für Reaktionen
7
Punkte
53
Gemäß
Code:
docker stop --help
sollte ein
Code:
docker stop <container>
dem Container nach dem stop-Signal 10 Sekunden Zeit geben, bevor dann ein KILL erfolgt. Gemäß dem Log oben sind es seltsamerweise nur 3 Sekunden. Vielleicht würde ein
Code:
docker stop -t 120 <container>
auch sauber funktionieren.

Auch ich möchte Duplicati für die Backups meiner Diskstation einsetzten. Mein Ziel ist, dass wenn ich die Stromversorgung meiner externen Festplatte einschalte, diese gemountet wird, per Autorun der Duplicati-Container aktiviert wird und das Backup startet. Und das wenn das Backup fertig ist, die Festplatte dann auch ausgeworfen wird. Und am besten auch noch per Smart-Steckdose die Stromversorgung der Festplatte wieder abgeschaltet wird.
An meinem Windows-Laptop verwende ich Duplicati.CommandLine.exe und fürs Backup garnicht die graphische Duplicati-Oberfläche.
Für die Diskstation bin ich noch auf der Suche, wie ich Duplicati hier im Container per Kommandozeile bedienen kann. Geht da direkt mit docker run ... irgendwas? Oder nach dem normalen Duplicati-Start mit docker exec ...? Oder brauche ich eine spezielle Version eines Duplicati-Docker-Images?
 

Horst22

Benutzer
Mitglied seit
07. Jun 2022
Beiträge
27
Punkte für Reaktionen
7
Punkte
53
Die notwendigen Skriptkommandos um ein Backup zu starten habe ich inzwischen gefunden. Duplicati-Backups im Docker-Container starte ich mittels den folgen Zeilen:
paramArray=("exec" "duplicati$diskID" "mono" "/app/duplicati/Duplicati.CommandLine.exe" "backup")
paramArray+=("file:///usbshare$diskID/$targetFolderName/")
paramArray+=("--backup-name=$backupName$diskID")
paramArray+=("--encryption-module=aes")
paramArray+=("--exclude=\"*@eaDir*/\"")
paramArray+=(...)
...
oldIFS="$IFS"
IFS=$'\n'
/usr/local/bin/docker "${paramArray[@]}" 2>&1 | /bin/tee -a "$logfilePathNameDuplicati" ; retval=${PIPESTATUS[0]}
IFS="$oldIFS"
...

Dabei habe ich für jede meiner externen Festplatten einen eigenen Dockercontainer mit dem Namen "duplicati$diskID"
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat