如何在容器中挂载文件,在首次运行之前不可用?

Nan*_*nne 6 docker

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

另一个问题是在第一次使用之前,尚未创建数据库文件.第一次用户将没有数据库,但另一个用户可能没有.我不能在建造期间"装载"任何东西**我相信.

它可能会像这样工作:

  • 第一个/新数据库启动:
    • 启动容器(不安装).
    • webapp创建一个数据库.
    • 停止容器
  • 后续开始:
    • 使用a -v来装入文件来启动容器

如果用户不需要额外的启动/停止会更好.即使它是,我仍然在寻找一种方法来做这个用户友好,可能有2'方法'启动它(也许我可以在docker-compose和'普通'方法中定义第一启动的东西? ).

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

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

**如何在构建期间将主机卷装载到Dockerfile中的docker容器中

Adr*_*uat 2

一种可能有效的方法是:

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

     docker run --name data_con my_db echo "my_db data container"
     docker run -d --volumes-from  data_con my_db
     ...
    
    Run Code Online (Sandbox Code Playgroud)

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