Мне нужно сделать резервную копию тома docker в определенном каталоге внутри другого тома docker с помощью Duplicity. Поэтому мне нужно запустить команду вроде этой в контейнере, выполняющем резервное копирование:
mkdir -p /backup/$backup-label
duplicity /target file:///backup/$backup-label
Поэтому я создал образ Docker, содержащий Duplicity, чтобы я мог выполнить указанную выше команду, сопоставив том, на который будет создана резервная копия, /target
и том, на котором будет храниться резервная копия /backup
.
Итак, мой вопрос заключается в том, как передать $backup-label команде run
и как создать точку входа, чтобы убедиться в наличии правильной структуры каталогов до запуска duplicity, как указано выше?
ТИА, Оле
P.S. Если бы я мог запустить контейнер вот так:
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
(Theдругой ответвозможно, более элегантное решение для вашего варианта использования. Но этот вопрос немного отличается, и ответ тоже. Так что для справки. Также, как если бы ваши требования стали более сложными...)