复合 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

(这其他答案对于您的用例来说可能是更优雅的解决方案。但这个问题略有不同,答案也略有不同。所以供参考。另外,好像你的要求应该变得更复杂......)

相关内容