gpt4 book ai didi

docker - 如何将文件挂载到容器中,在第一次运行之前不可用?

转载 作者:IT老高 更新时间:2023-10-28 21:40:19 24 4
gpt4 key购买 nike

我正在尝试为使用基于文件的数据库的 web 应用程序构建 Dockerfile。我希望能够从主机挂载文件*该文件位于完整软件安装的根目录中,因此挂载该完整目录并不理想。

另一个问题是在第一次使用之前,还没有创建数据库文件。第一次使用的用户没有数据库,但另一个用户可能。我相信在构建过程中我无法“安装”任何东西**。

它可能会这样工作:

  • 第一个/新数据库启动:
    • 启动容器(不挂载)。
    • webapp 创建一个数据库。
    • 停止容器
  • 后续开始:
    • 使用 -v 启动容器以挂载文件

如果用户不需要额外的启动/停止会更好。即使是这样,我仍在寻找一种用户友好的方法,可能有两种启动它的“方法”(也许我可以在 docker-compose 中定义一个首次启动的东西以及一个“正常”方法? )。

我怎样才能以简单的方式做到这一点,以便任何第一次使用的用户都清楚?

* 原因是您可以复制 Dockerfile 和数据库文件作为备份,并且只需使用这两个元素即可启动并运行。

** How to mount host volumes into docker containers in Dockerfile during build

最佳答案

一种可行的方法是:

  • 在构建文件中启动数据库,以便在退出之前有时间创建默认文件。
  • 在 Dockerfile 中为文件上述指令之后声明一个 VOLUME。假设您没有明确提供主机路径,这将导致在容器启动时将文件复制到卷中
  • 使用数据容器而不是卷。所以正常的用法是:

     docker run --name data_con my_db echo "my_db data container"
    docker run -d --volumes-from data_con my_db
    ...

第一个容器应立即退出,但设置第二个容器中使用的卷。

关于docker - 如何将文件挂载到容器中,在第一次运行之前不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31765230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com