Точка входа в состав Docker?

Точка входа в состав Docker?

Мне нужно сделать резервную копию тома 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другой ответвозможно, более элегантное решение для вашего варианта использования. Но этот вопрос немного отличается, и ответ тоже. Так что для справки. Также, как если бы ваши требования стали более сложными...)

Связанный контент