複合 Docker エントリポイント?

複合 Docker エントリポイント?

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

その他の回答おそらく、あなたのユースケースにはよりエレガントなソリューションです。しかし、この質問は若干異なり、答えも同様です。参考までに。また、要件がより複雑になる場合も同様です...)

関連情報