Duplicity を使用して、docker ボリュームを別の docker ボリューム内の特定のディレクトリにバックアップする必要があります。そのため、バックアップを実行するコンテナー内で次のようなコマンドを実行する必要があります。
mkdir -p /backup/$backup-label
duplicity /target file:///backup/$backup-label
/target
そこで、バックアップ先のボリュームとバックアップを保存するボリュームをマッピングして上記のコマンドを実行できるように、duplicity を含む Docker イメージを作成しました/backup
。
私の質問は、$backup-label をコマンドに渡す方法run
と、上記のように duplicity を実行する前に正しいディレクトリ構造が存在することを確認するためのエントリポイントを作成する方法です。
TIA、オレ
PS コンテナを次のように実行できる場合:
ole@MKI:~$ docker run --rm -it -v data-volume:/target -v backup-volume/label-for-backup:/backup duplicity-backup-image
そうすれば解決するでしょう。しかし、どうやら docker ではボリューム内のサブディレクトリのマッピングは許可されていないようです。試してみると、次のメッセージが表示されます。
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.
答え1
良い解決策としては、CMD
またはのようにシェル スクリプトを使用することですENTRYPOINT
。
スクリプトに変数を渡したい場合は、-eを使用してスクリプトに環境変数を渡すことができます。docker run -e backup-label=somelabel
このオプションの利点は、パラメータを解釈せずにさまざまな領域を設定できることです。${variable:-}
構文。
あなたの場合:docker run --rm -e backup-label=somelabel -it -v data-volume:/target -v backup-volume/label-for-backup:/backup duplicity-backup-image
シェル スクリプト (実行可能であることを確認してください):
#!/bin/sh
mkdir -p /backup/$backup-label
duplicity /target file:///backup/$backup-label
(その他の回答おそらく、あなたのユースケースにはよりエレガントなソリューションです。しかし、この質問は若干異なり、答えも同様です。参考までに。また、要件がより複雑になる場合も同様です...)