Zusammengesetzter Docker-Einstiegspunkt?

Zusammengesetzter Docker-Einstiegspunkt?

Ich muss ein Docker-Volume mit Duplicity in einem bestimmten Verzeichnis innerhalb eines anderen Docker-Volumes sichern. Dazu muss ich innerhalb des Containers, der das Backup durchführt, einen Befehl wie diesen ausführen:

mkdir -p /backup/$backup-label
duplicity /target file:///backup/$backup-label

Daher habe ich ein Docker-Image erstellt, das Duplicity enthält, sodass ich den obigen Befehl mit der Zuordnung des Volumes, auf dem das Backup erstellt werden soll, /targetund des Volumes, auf dem das Backup gespeichert wird, ausführen kann /backup.

Meine Frage ist also, wie ich $backup-label an den runBefehl übergebe und wie ich den Einstiegspunkt erstelle, sodass sichergestellt wird, dass die richtige Verzeichnisstruktur vorhanden ist, bevor Duplicity wie oben angegeben ausgeführt wird?

TIA, Ole

PS: Wenn ich den Container so ausführen könnte:

ole@MKI:~$ docker run --rm -it -v data-volume:/target -v backup-volume/label-for-backup:/backup duplicity-backup-image

Das würde das Problem lösen. Aber anscheinend erlaubt Docker nicht die Zuordnung von Unterverzeichnissen innerhalb von Volumes. Wenn ich es versuche, erhalte ich die folgende Meldung:

docker: Error response from daemon: create backup-volume/label-for-backup: "backup-volume/label-for-backup" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.

Antwort1

Eine gute Lösung ist die Verwendung eines Shell-Skripts als CMDoder ENTRYPOINT.

Wenn Sie Variablen an das Skript übergeben möchten, können Sie mit -e beliebige Umgebungsvariablen an das Skript übergeben: docker run -e backup-label=somelabel. Diese Option hat den Vorteil, dass Sie verschiedene Bereiche konfigurieren können, ohne Parameter interpretieren zu müssen. Ich schlage vor, sich auch die${variable:-}Syntax.

In Ihrem Fall:docker run --rm -e backup-label=somelabel -it -v data-volume:/target -v backup-volume/label-for-backup:/backup duplicity-backup-image

Das Shell-Skript (stellen Sie sicher, dass es ausführbar ist):

#!/bin/sh 
mkdir -p /backup/$backup-label
duplicity /target file:///backup/$backup-label

(Derandere Antwortist vielleicht die elegantere Lösung für Ihren Anwendungsfall. Aber diese Frage ist etwas anders, und die Antwort auch. Also als Referenz. Und als ob Ihre Anforderungen komplizierter werden sollten...)

verwandte Informationen