Automatisches erstellen der Export config json files via Skript

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254
@ctrlaltdelete
Ja, das habe ich auch schon getestet (und funktioniert).

@*kw*
Hmm... da habe ich das gleiche Problem, sprich ein Teil fehlt im File und wird über die Konsole ausgeworfen:
Code:
CONTAINERNAME export
{
   "data" : {},
   "httpd_restart" : false,
   "success" : true
}
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
13.633
Punkte für Reaktionen
5.809
Punkte
524
was kann denn das Script von hier besser oder mehr?
 

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254
Das Script von hier hatte ich zuerst entdeckt. Ich gehe auch gerne zwei Wege. Wenn ein Weg ausfällt, ich das nicht bemerke, läuft noch der zweite Weg zum Ziel. Es sind ja nur ein paar KB.
 

Hellraiser123

Benutzer
Sehr erfahren
Mitglied seit
31. Jul 2024
Beiträge
764
Punkte für Reaktionen
410
Punkte
139
Würde man sich nicht eine Menge "Ärger" ersparen, wenn man es direkt als compose.yml schreiben würde? Dann könnten diese direkt gesichert werden und man könnte sich das komplette Script sparen. Vor allem mit docker-autocompose könnte man sich einmalig die compose Dateien erstellen und darauf wechseln. Hat auch den Vorteil, dass die auf jedem System funktionieren und nicht nur bei Synology. Wobei man aufpassen muss, dass die API sich nicht ändert.
 

*kw*

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
10. Aug 2013
Beiträge
2.842
Punkte für Reaktionen
1.379
Punkte
174
Um meinen polnischen Freund zu zitieren ("Hä...was...doppla gemoppla?" "Nein, doppelt gemoppelt").

Für yaml dieser Forentipp. :)

Code:
#!/bin/bash

# anzupassen:
BackUpDir="/volume1/docker/backup"
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"

    # YAML:
        # https://www.synology-forum.de/threads/docker-container-automatische-docker-compose-file-erstellen-als-backup.110444/post-897496
        docker run --rm -v /var/run/docker.sock:/var/run/docker.sock red5d/docker-autocompose "${container}" > "${BackUpDir}/${container}_$(date +%Y-%m-%d_%H-%M).yml"
    fi
done
find ${BackUpDir} -mtime +14 -exec rm {} \;
exit
 
  • Like
Reaktionen: ctrlaltdelete

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
13.633
Punkte für Reaktionen
5.809
Punkte
524
Ich benutzet auch beides, yaml und json Export :cool:
1726750580865.png
 
  • Like
Reaktionen: mj084 und *kw*

Hellraiser123

Benutzer
Sehr erfahren
Mitglied seit
31. Jul 2024
Beiträge
764
Punkte für Reaktionen
410
Punkte
139
Die Frage ist jetzt wirklich ernst gemeint und es interessiert mich einfach.
Wieso beides? Welchen Vorteil siehst du darin? Gerade beim JSON. Und die nächste Frage in dem Script löscht er ja alle Backups die älter als 14 Tage sind. daraus schließe ich einfach mal, dass es täglich läuft. Da frag ich mich wieso? Wie häufig ändert man irgendwas an der compose/Einstellungen?
Ich würde ja sagen, dass wenn man die Compose erstellt hat bräuchte man doch kein weiteren Export davon. Die Compose.yml liegt ja eh im Filesystem und kann direkt gesichert werden und der Export wäre nicht nötig. Einziger Grund der mir einfällt, man verwendet z.B. Portainer. Der schreibt sein Zeug ja nur in die DB, aber dann würde ich eher ein Backup per API machen und das sichern. Da sind die Stacks und die Portainer Einstellungen mit drin.
Aber wie gesagt, da würden mich die Gründe mal wirklich interessieren.
 

ctrlaltdelete

Benutzer
Contributor
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
13.633
Punkte für Reaktionen
5.809
Punkte
524
Ganz ehrlich, darüber habe ich nicht nachgedacht, ich mache alles im Portainer und wollte ein Backup haben, die Files werden auch noch mit HB weggesichert.
 

Hellraiser123

Benutzer
Sehr erfahren
Mitglied seit
31. Jul 2024
Beiträge
764
Punkte für Reaktionen
410
Punkte
139
Du könntest mit
Code:
curl -k -X "POST" "https://portainer-ip:9443/api/backup" \
          -H 'x-api-key: DEIN-API-KEY' \
          -H 'Content-Type: application/json; charset=utf-8' \
          -d '{ "password": "" }' --output /volume1/..../backup.tar.gz>
dein komplettes Portainer halt sichern. Wenn du es neu machen musst kannst du es bei der Installation einfach hochladen und dann ist alles wie immer.
 
  • Like
Reaktionen: mj084 und haydibe

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254
Ich muss @Hellraiser123 im Grunde recht geben. Es ist doppelt nicht nötig, zeitlich engmaschig auch nicht. Ich selber werde es monatlich einmal machen lassen, damit auch neue Container oder eventuelle Änderungen enthalten sind. Bei den paar KB spielt es keine Geige.
 

*kw*

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
10. Aug 2013
Beiträge
2.842
Punkte für Reaktionen
1.379
Punkte
174
Ich habe auch nur die json drin, die yaml bei Bedarf. Der Rest war bisher Gewohnheit und da sich meine Containereinstellungen kaum bis nicht verändern, hab ich die jetzt auch rausgenommen.

Ja, @Hellraiser123 hat Recht und manchmal braucht's so Momente zum Durchkehren. ;)
 
  • Like
Reaktionen: peterhoffmann

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Auch hier werden die JSON-Files erzeugt, aber unvollständig. Das was in den JSON-Files fehlt, kommt über die Konsole:
Das ist die Status-Rückmeldung des Exports, also eher Meta-Informationen . Der Export der JSON sollte vollständig sein. Aber will man die wirklich haben? Compose-Dateien sind schon länger ein Industriestandard. Warum auf die Syno-Sonderlocke setzen, wenn man beiden dasselbe erreichen kann (wobei das nicht ganz wahr ist: eine Compose-Datei kann man danach flexibler erweitern)? :D
 
  • Like
Reaktionen: mj084

wegomyway

Benutzer
Sehr erfahren
Mitglied seit
03. Aug 2022
Beiträge
1.200
Punkte für Reaktionen
519
Punkte
184
Im #49 von @Hellraiser123 hab ich den Code per Copy-and-Paste im Aufgabenplaner eine Aufgabe erstellt.
Nach Änderungen sieht dieser folgend aus:
Code:
curl -k -X "POST" "https://IPmeinerNAS:9443/api/backup" \
          -H 'x-api-key: ptr_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=' \
          -H 'Content-Type: portainer/json; charset = utf-8' \
          -d '{ "password" : xxxxxxxxxxxxxxxxxxxx'}' --output /volume1/docker/backup.tar.gz'

Standardausgabe/Fehler folgend:
Code:
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   220  100   145  100    75    403    208 --:--:-- --:--:-- --:--:--   612
{"message":"Invalid request payload","details":"Json: invalid character 'F' looking for beginning of value: xxxxxxxxxxxxxxxxxxxx} --output /..."}

Das Passwort von demjenigen, um in Portainer sich einzuloggen, fängt mit "F" an.

Kann mir da vielleicht weiterhelfen, wo sich da der Fehler befindet? Ich komm’ da nicht wirklich weiter

wieder mit Code #49 verglichen und geändert:
Code:
curl -k -X "POST" "https://xxx.xxx.xxx.xx:9443/api/backup" \
          -H 'x-api-key : ptrxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=' \
          -H 'Content-Type : portainer/json; charset=utf-8' \
          -d '{ "password" : xxxxxxxxxxxxxxxxxxxx'}' --output /volume1/docker/backup.tar.gz'

Ausgabe nachdem Änderung:
Code:
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   111    0    36  100    75   4536   9450 --:--:-- --:--:-- --:--:-- 15857
400 Bad Request: invalid header name
 
Zuletzt bearbeitet:

wegomyway

Benutzer
Sehr erfahren
Mitglied seit
03. Aug 2022
Beiträge
1.200
Punkte für Reaktionen
519
Punkte
184
Vielleicht kann ein jeder, der diesen Code erfolgreich verwendet, seinen hier mal "geschwärzt" posten. Wäre echt :cool:
 

wegomyway

Benutzer
Sehr erfahren
Mitglied seit
03. Aug 2022
Beiträge
1.200
Punkte für Reaktionen
519
Punkte
184
ich hab nochmals von vorne begonnen. Vorhandene Aufgabe gelöscht und alles auf "=".
Die Datei wird erstellt, ist im zugewiesenen Ordner abgelegt. Soweit so gut.
In der Ausgabe steht folgendes drin :
Code:
/bin/bash: line 3: gt: command not found
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0

Korrekt und ignorieren oder "hängt" das noch was schief ?
 


 

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