複合 Docker 入口點?

複合 Docker 入口點?

我需要使用 Duplicity 將 docker 磁碟區備份到另一個 docker 磁碟區中的特定目錄。所以我需要在執行備份的容器中執行這樣的命令:

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

因此,我建立了一個包含口是心非的 docker 映像,以便我可以執行上述命令,將要備份的磁碟區對應到/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

一個好的解決方案是使用 shell 腳本 asCMDENTRYPOINT

如果要將變數傳遞到腳本中,可以使用 -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

shell腳本(確保它是可執行的):

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

(這其他答案對於您的用例來說可能是更優雅的解決方案。但這個問題略有不同,答案也略有不同。所以供參考。另外,好像你的要求應該變得更複雜...)

相關內容