Guardar datos como parte de la image de Docker?

Intento crear una image personalizada de Docker para Ghost ( https://ghost.org/ ) con algunos temas preinstalados. Saqué la image oficial ( https://hub.docker.com/_/ghost/ ) e instalé el tema Uno Zen ( https://github.com/Kikobeats/uno-zen ) según las instrucciones: clonar en el content/themes , ejecuta el script de configuration, etc.

Luego ejecuté el docker commit a implementar estos cambios como otra capa en la image existente de Docker. Sin embargo, la próxima vez que gire un contenedor con esta image, no veo los files de temas donde deberían estar. Es como si ninguno de los cambios persistiera.

¿Qué estoy haciendo mal?

El problema es que / var / lib / ghost / content se declara como un volumen:

 ENV GHOST_CONTENT /var/lib/ghost/content ... VOLUME $GHOST_CONTENT 

Cuando un directory se declara como un volumen en un Dockerfile, las modificaciones que se realicen en él no se saveán posteriormente al build o confirmar una nueva image.

Una posible solución sería copyr el /var/lib/ghost/content a otro, por ejemplo, /var/lib/ghost/content.real y reconfigurar. Puede agregar estos commands a su file Docker (le sugiero que realice los cambios en un file Docker en lugar de ejecutar y confirmar).

  ENV GHOST_CONTENT /var/lib/ghost/content.real RUN cp -a /var/lib/ghost/content "$GHOST_CONTENT"; \ gosu node ghost config --ip 0.0.0.0 --port 2368 --no-prompt --db sqlite3 --url http://localhost:2368 --dbpath "$GHOST_CONTENT/data/ghost.db"; \ gosu node ghost config paths.contentPath "$GHOST_CONTENT" VOLUME "$GHOST_CONTENT" 

Consejos tomados del file Docker original:

https://github.com/docker-library/ghost/blob/a9b023e922f4f44c4c15f765973c2939f1be9b12/1/debian/Dockerfile