【问题标题】:Save data as part of Docker image?将数据保存为 Docker 映像的一部分?
【发布时间】:2017-08-12 16:53:14
【问题描述】:

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

然后我运行 docker commit 将这些更改作为现有 Docker 映像的另一层推送。但是,下次我使用此图像启动容器时,我看不到主题文件应该在的位置。好像没有任何更改持续存在。

我做错了什么?

【问题讨论】:

    标签: docker ghost-blog ghost


    【解决方案1】:

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

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

    当一个目录在 Dockerfile 中声明为一个卷时,在构建或提交新映像时,对其所做的任何修改都不会保存。

    一种可能的解决方法是将/var/lib/ghost/content 复制到另一个,例如/var/lib/ghost/content.real 并重新配置。您可以将这些命令添加到您的 Dockerfile(我建议您在 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

    【讨论】:

    • 很好。谢谢你。关于如何实现我想要做的任何建议?
    • 所以根据您使用 Dockerfile 的建议,我是否也应该为我的 Dockerfile 的主题部分进行设置程序?
    • 是的。您可以通过结合使用 COPYRUN 指令来实现。
    猜你喜欢
    • 2015-02-18
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多