Automatisches erstellen der Export config json files via Skript

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Mir ist heute aufgefallen, dass nur gestartete Container mit deinem Script exportiert werden. Besteht die Möglichkeit, das Script auf alle Container auszuweiten? Bedeutet version=1 das nur die laufenden Container gesichert werden?
Ich hab mich heute wieder an den Thread erinnert.

Ich weiß nicht welche quatsch mir damals eingefallen ist zu fragen, ob über die UI ausgeschaltete exportiert werden können. Wenn, wäre der umgekehrte Fall eher die Rückfrage Wert gewesen.

<update>Ich vermute mal, ich wollte Dich dazu ermutigen es einfach selbst mit den Browser-Tools herauszufinden. Ansonsten macht die Rückfrage für mich gerade keinen Sinn 😆</update>

Hiermit kann man einen Container samt Zustand speichern:
Code:
/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container method=export version=1 path="${BACKUP_DIR}" name="${container}"
Die erzeugte Datei ist dann unter dem Pfad ${BACKUP_DIR}/${container}.syno.txz zu finden.
Das habe ich sehr ungeschickt geschrieben. ${BACKUP_DIR} muss ab einem Share angegeben sein, bspw.:
Code:
 /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container method=export version=1 path="/docker" name="watchtower"

Während die Variante, die nur die Konfiguration speichert, den Pfad inkl. Volume haben will:
Code:
/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 outfile="/volume1/docker/watchtower.json" name="watchtower"

Weder unter DSM7, noch DSM6 macht es bei mir einen Unterschied, ob der Container läuft oder nicht läuft: beides funktioniert.
 
Zuletzt bearbeitet:

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.120
Punkte
214
Weder unter DSM7, noch DSM6 macht es bei mir einen Unterschied, ob der Container läuft oder nicht läuft: beides funktioniert.
Kann ich so nicht bestätigen. Ich habe jetzt unterschiedliche Anzahl von deaktivierten Containern getestet. Die Container, welche deaktiviert werden nicht gesichert, weder mit Einstellungen noch mit. Image (komplett). Das manuelle exportieren funktioniert. Auch wenn die Container laufen, werden diese exportiert. Es liegt definitiv am Zustand des Containers! Getestet auf DSM 7.1.1 Update 3.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
@EDvonSchleck hier die exakten Schritte die ich für meine Tests auf einer DS920+ mit DSM 7.1.1-42962 Update 3, Docker Paket 20.10.3-1308 durchgeführt habe:
- Container erzeugen: docker run -d -t --name test alpine
- Zustand überprüfen: docker ps -a --filter name=test, Erwartung: Container im State Running
- Container exportieren: /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container method=export version=1 path="/docker" name="test"
- Container Einstellung exportieren: /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 outfile="/volume1/docker/test.json" name="test"
- Sichtprüfung, ob alles da ist: ls -l /volume1/docker, Erwartung: /volume1/docker/test.json und /volume1/docker/test.syno.txz existieren.
- Container stoppen: docker stop test
- Zustand überprüfen: docker ps -a --filter name=test, , Erwartung: Container im State Stopped
- Container exportieren: /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container method=export version=1 path="/docker" name="test"
- Container Einstellung exportieren: /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 outfile="/volume1/docker/test-1.json" name="test"
- Sichtprüfung, ob alles da ist: ls -l /volume1/docker, Erwartung: zusätzlich existieren /volume1/docker/test-1.json und /volume1/docker/test-1.syno.txz (weil test.syno.txz schon existiert).

Bitte teil doch mal nach genau diesem Muster Deine exakten Befehle (bitte kein: "ich habe exakt gemacht was Du gemacht hast, nur mit anderen Werten") und deren Ausgabe.

Was in jedem Fall nicht funktioniert ist für "name" die Container ID zu verwenden, es muss zwingend der Container Name sein.
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Was in jedem Fall nicht funktioniert ist für "name" die Container ID zu verwenden, es muss zwingend der Container Name sein.
Nur mal eine kleine Anmerkung am Rande.
Wenn man aber anstelle des Filters name den Filter id verwendet kann auch die ID für diese Zwecke herangezogen werden.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
ich meine "name" bei /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container method=export version=1 path="/docker" name="test". Da funktioniert die ID zumindest bei mir nicht. Ich lasse mich da gerne vom Gegenteil überzeugen. Führ mal aus und zeig mal her :)
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Okay dann hatten wir wohl aneinander vorbeigeredet. Ich hatte nämlich interpretiert dass es um das docker command docker ps -a --filter name=test und nicht um das synowebapi.
Ich nehme alles wieder zurück und entschuldige mich für den unqualifizierten Beitrag :rolleyes:
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Du meinst es liegt wohl doch an meiner Person? :oops:

Was in jedem Fall nicht funktioniert ist für "name" die Container ID zu verwenden, es muss zwingend der Container Name sein.
Aber diese Aussage ist ja nicht "eindeutig" bei dem geschriebenen Beitrag, denn es gibt nämlich zwei unterschiedliche Befehle die beschrieben sind in denen "name" verwendet wird.
Ich hoffe ihr seht es mir nach wenn man das auch falsch interpretieren kann wie in meinem Fall.
 
Zuletzt bearbeitet von einem Moderator:

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314
Du meinst es liegt wohl doch an meiner Person? :oops:
Nun ja, ganz von der Hand zu weisen wäre es ja nicht… finde ich… mit einem verschmitzten Lachen im Gesicht. Nein, Quatsch. Alles gut. Mach dir keine Gedanken. Ich muss sowas halt einfach kommentieren, jedoch ohne bösen Hintergedanken. So und nun besser wieder Back to Topic, sonst gibts noch Haue.
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
und nun besser wieder Back to Topic
Wo wir schon bei der api SYNO.Docker.Container sind, gibt es hierzu auch seitens Synology eine offizielle API Dokumentation?
Leider ist diese im Download Center nicht unter den Dokumenten bzw. den White Papers aufgeführt.
Und auch hier unter allen verfügaberen Downloads https://archive.synology.com/download/ ist nichts zu finden.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314
Ich kenn nur diese hier. Wollte mich immer mal damit auseinandersetze, um es mir für meine 3rdParty Apps nutzbar zu machen. Aber Ich will immer so viel…

Dieses und weitere Dokumente gibt es auf den Seiten von Synology im Developer Bereich
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Hatten wir wieder aneinander vorbeigeredet? ;) Hatte ich mich wohl wieder nicht verständlich genug ausgedrückt? 😄
Ich fragte explizit nach einer API Dokumentation zu "SYNO.Docker.Container". Und dieses hier welches du verlinkst ist ja quasi "nur" die "DSM Login Web API" und beschreibt nichts mit Docker.
@Tommes Wir beide und Kommunikation... 🤣

Ich hatte selbst schon einmal dieses API Dokument gefunden Synology_Virtual_Machine_Manager_API_Guide.pdf. Weshalb nichts explizit zu Docker verfügbar ist wundert mich.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314
Nein, nein… wir haben nicht aneinander vorbeigeredet. Du sagtest…
Ich fragte explizit nach einer API Dokumentation zu "SYNO.Docker.Container"
… und ich antwortete…
… wobei die Betonung auf >nur< lag. Es hätte ja sein können, das du dir aus dieser Information irgendwas für die Docker API herauszufiltern vermagst. Ich geh aber nochmal in mich, da ich auch meine, schon mal irgendwas zum Thema Docker API gesehen zu haben.

Wir beide und Kommunikation... 🤣
Mittlerweile können wir ja (wieder) drüber lachen. Damals waren wir zwei aber schon leicht gegenseitig angepi**t 😂
 
  • Haha
Reaktionen: ctrlaltdelete

blinky911

Benutzer
Mitglied seit
04. Jul 2021
Beiträge
97
Punkte für Reaktionen
0
Punkte
6
Gudem das Thema ist zwar schon älter. Aber kann man da irgendwie einstellen das man nur X Versionen behalten möchte? Sonst würden ja unendliche viele Sicherungen eines Containers gemacht werden.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.546
Punkte für Reaktionen
1.379
Punkte
234
Schieb einfach ein zweites Skript hinterher. Dafür hatte ich mal ArchiveRotate geschrieben. Damit kannst du einstellen, wie viele Versionen in welchen Intervallen erhalten bleiben sollen:
https://github.com/geimist/archive_rotate
 
Zuletzt bearbeitet:

EDvonSchleck

Gesperrt
Mitglied seit
06. Mrz 2018
Beiträge
4.703
Punkte für Reaktionen
1.120
Punkte
214
Du kannst auch einfach mit dem Find-Befehl in der untersten Zeile die Dateien nach Tagen X löschen. Hier eingestellt auf 25 Tage.

Code:
find /volume1/docker/Docker_BackUps/ -mtime +25 -delete

Die Tage sind natürlich variabel.
 
  • Like
Reaktionen: haydibe und blinky911

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254
Ich muss den Thread noch mal hochholen:

Probiert habe ich zuerst den Schnipsel von @geimist, der den Export über zwei Zeilen (Variable + echo) durchführt:
Bash:
BackUpDir="/volume1/MEIN_PATH/"

IgnoredContainer=(jitsi_jicofo jitsi_jvb jitsi_prosody jitsi_web synology_docviewer_2 synology_docviewer_1)

for container in $(docker ps --format "{{ .Names }}"); do
    if grep -q "$container" <<< "${IgnoredContainer[@]}" ; then
        echo "$container is on ignore list. Skipping this container."
        continue
    else
        echo "$container export"
        content=$(/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 name="$container")
        echo "{${content#*{}" > "${BackUpDir}/${container}_$(date +%Y-%m-%d_%H-%M).json"
    fi
done

Die JSON-Files werden erstellt, es kommt aber die Fehlermeldung:
Code:
[Line 265] Not a json value: CONTAINERNAME
[Line 295] Exec WebAPI:  api=SYNO.Docker.Container.Profile, version=1, method=export, param={"name":"CONTAINERNAME"}, runner=SYSTEM_ADMIN

Ach was, gar nicht lange fummeln, ich nehme den Schnipsel von @haydibe:
Code:
#!/bin/bash
BACKUP_DIR="/volume1/MEIN_PATH"
IGNORE_CONTAINERS=(jitsi_jicofo jitsi_jvb jitsi_prosody jitsi_web synology_docviewer_2 synology_docviewer_1)
EXPORT_DATE="$(date +%Y-%m-%d_%H-%M)"

[ ! -d "${BACKUP_DIR}" ] && mkdir -p "${BACKUP_DIR}"
echo "exporting container settings to ${BACKUP_DIR}"

for container in $(docker ps --format "{{ .Names }}"); do
    if grep -q "$container" <<< "${IGNORE_CONTAINERS[@]}" ; then
        echo "${container} is on ignore list. Skipping this container."
        continue
    else
        echo "${container} export"
        /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 outfile="${BACKUP_DIR}/${container}_${EXPORT_DATE}.json" name="${container}"  2> /dev/null
    fi
done
Auch hier werden die JSON-Files erzeugt, aber unvollständig. Das was in den JSON-Files fehlt, kommt über die Konsole:
Code:
CONTAINERNAME export
{
   "data" : {},
   "httpd_restart" : false,
   "success" : true
}
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
13.651
Punkte für Reaktionen
5.822
Punkte
524
  • Like
Reaktionen: peterhoffmann

*kw*

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
10. Aug 2013
Beiträge
2.842
Punkte für Reaktionen
1.382
Punkte
174
Als Vorlage bekommen…

Code:
#!/bin/bash
BACKUP_DIR="/volume1/docker/backup"
IGNORE_CONTAINERS=(jitsi_jicofo jitsi_jvb jitsi_prosody jitsi_web synology_docviewer_2 synology_docviewer_1)
EXPORT_DATE="$(date +%Y-%m-%d_%H-%M)"

[ ! -d "${BACKUP_DIR}" ] && mkdir -p "${BACKUP_DIR}"
echo "exporting container settings to ${BACKUP_DIR}"

for container in $(docker ps --format "{{ .Names }}"); do
    if grep -q "$container" <<< "${IGNORE_CONTAINERS[@]}" ; then
        echo "${container} is on ignore list. Skipping this container."
        continue
    else
        echo "${container} export"
        /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 outfile="${BACKUP_DIR}/${container}_${EXPORT_DATE}.json" name="${container}"  2> /dev/null
    fi
done
find "$backup_dir" -name "*.json" -mtime +7 -exec rm {} \;
exit
 


 

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