¿Punto de entrada de Docker compuesto?

¿Punto de entrada de Docker compuesto?

Necesito hacer una copia de seguridad de un volumen de Docker en un directorio específico dentro de otro volumen de Docker usando Duplicity. Entonces necesito ejecutar un comando como este dentro del contenedor que realiza la copia de seguridad:

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

Así que he creado una imagen de la ventana acoplable que contiene duplicidad para poder ejecutar el comando anterior asignando el volumen en el que se realizará la copia de seguridad /targety el volumen en el que se almacena la copia de seguridad /backup.

Entonces, mi pregunta es ¿cómo paso $backup-label al runcomando y cómo creo el punto de entrada para que se asegure de que exista la estructura de directorio correcta antes de ejecutar duplicity como se indicó anteriormente?

TIA, Olé

PD: Si pudiera ejecutar el contenedor así:

ole@MKI:~$ docker run --rm -it -v data-volume:/target -v backup-volume/label-for-backup:/backup duplicity-backup-image

Eso lo solucionaría. Pero aparentemente Docker no permite el mapeo de subdirectorios dentro de volúmenes. Cuando lo intento me sale el siguiente mensaje:

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.

Respuesta1

Una buena solución es utilizar un script de shell como CMDo ENTRYPOINT.

Si desea pasar variables al script, puede usar -e para pasar cualquier variable de entorno al script: docker run -e backup-label=somelabel. Esta opción tiene la ventaja de que puedes configurar varias áreas sin interpretar parámetros. Sugiero mirar también el${variable:-}sintaxis.

En tu caso:docker run --rm -e backup-label=somelabel -it -v data-volume:/target -v backup-volume/label-for-backup:/backup duplicity-backup-image

El script de shell (asegúrese de que sea ejecutable):

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

(Elotra respuestaEs quizás la solución más elegante para su caso de uso. Pero esta pregunta es ligeramente diferente, y la respuesta también. Entonces como referencia. Además, como si sus requisitos fueran más complicados...)

información relacionada