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

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

Duplicityを使用して、ドッカーボリュームを別のドッカーボリュームの特定のディレクトリにバックアップする必要があります。したがって、バックアップを実行するコンテナで次のコマンドを実行する必要があります。

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

/targetそこで、上記のコマンドを実行し、バックアップするボリュームをバックアップを保存するボリュームにマップできるように、冗長性のあるドッカーイメージを作成しました/backup

だから私の質問は、$ backup-labelをコマンドに渡し、run上記の二重性を実行する前に正しいディレクトリ構造が存在することを確認するエントリポイントをどのように生成しますか?

ティア、オレ

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

(これその他の回答あなたのユースケースにはよりエレガントなソリューションになることができます。しかし、この質問は少し異なり、答えも同じです。参考までに。また、あなたの要件はより複雑になるはずです...)

関連情報