保存数据作为Docker镜像的一部分?

我正在尝试为Ghost( https://ghost.org/ )创build一个自定义Docker镜像,并预装了一些主题。 我拉了官方图片( https://hub.docker.com/_/ghost/ ),并根据说明安装了Uno Zen( https://github.com/Kikobeats/uno-zen )主题 – 将content/themes克隆到content/themes ,运行安装脚本等

然后我运行Docker docker commit ,将这些更改作为现有Docker镜像上的另一个层进行推送。 但是,下次我使用这个图像旋转一个容器,我没有看到他们应该在哪里的主题文件。 这就像没有任何变化持续下去。

我究竟做错了什么?

问题是/ var / lib / ghost / content被声明为一个卷:

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

当一个目录在一个Dockerfile中被声明为一个卷时,在构build或提交一个新镜像时,不会保存对其进行的任何修改。

可能的解决方法是将/var/lib/ghost/content复制到另一个,例如/var/lib/ghost/content.real并重新configuration。 您可以将这些命令添加到您的Dockerfile(我build议您在Dockerfile中进行更改,而不是运行并提交)。

  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" 

来自原始Dockerfile的提示:

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