Ich hab mich heute wieder an den Thread erinnert.Mir ist heute aufgefallen, dass nur gestartete Container mit deinem Script exportiert werden. Besteht die Möglichkeit, das Script auf alle Container auszuweiten? Bedeutetversion=1
das nur die laufenden Container gesichert werden?
Das habe ich sehr ungeschickt geschrieben. ${BACKUP_DIR} muss ab einem Share angegeben sein, bspw.:Hiermit kann man einen Container samt Zustand speichern:
Die erzeugte Datei ist dann unter dem PfadCode:/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container method=export version=1 path="${BACKUP_DIR}" name="${container}"
${BACKUP_DIR}/${container}.syno.txz
zu finden.
/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container method=export version=1 path="/docker" name="watchtower"
/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 outfile="/volume1/docker/watchtower.json" name="watchtower"
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.Weder unter DSM7, noch DSM6 macht es bei mir einen Unterschied, ob der Container läuft oder nicht läuft: beides funktioniert.
docker run -d -t --name test alpine
docker ps -a --filter name=test
, Erwartung: Container im State Running /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container method=export version=1 path="/docker" name="test"
/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 outfile="/volume1/docker/test.json" name="test"
ls -l /volume1/docker
, Erwartung: /volume1/docker/test.json und /volume1/docker/test.syno.txz existieren.docker stop test
docker ps -a --filter name=test
, , Erwartung: Container im State Stopped /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container method=export version=1 path="/docker" name="test"
/usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container.Profile method=export version=1 outfile="/volume1/docker/test-1.json" name="test"
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).Nur mal eine kleine Anmerkung am Rande.Was in jedem Fall nicht funktioniert ist für "name" die Container ID zu verwenden, es muss zwingend der Container Name sein.
name
den Filter id
verwendet kann auch die ID für diese Zwecke herangezogen werden.docker ps -a --filter name=test
und nicht um das synowebapi
.Das gibt mir langsam echt zu denkenOkay dann hatten wir wohl aneinander vorbeigeredet
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.Was in jedem Fall nicht funktioniert ist für "name" die Container ID zu verwenden, es muss zwingend der Container Name sein.
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.Du meinst es liegt wohl doch an meiner Person?
Wo wir schon bei der apiund nun besser wieder Back to Topic
SYNO.Docker.Container
sind, gibt es hierzu auch seitens Synology eine offizielle API Dokumentation?… und ich antwortete…Ich fragte explizit nach einer API Dokumentation zu "SYNO.Docker.Container"
… 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.Ich kenn nur diese hier
Mittlerweile können wir ja (wieder) drüber lachen. Damals waren wir zwei aber schon leicht gegenseitig angepi**tWir beide und Kommunikation...
find /volume1/docker/Docker_BackUps/ -mtime +25 -delete
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
[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
Auch hier werden die JSON-Files erzeugt, aber unvollständig. Das was in den JSON-Files fehlt, kommt über die Konsole: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
CONTAINERNAME export
{
"data" : {},
"httpd_restart" : false,
"success" : true
}
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
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.