我怎样才能在一个容器中安装一个文件,这是第一次运行之前不可用?

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

另一个问题是,在第一次使用之前,数据库文件还没有被创build。 第一次用户不会有一个数据库,但另一个用户可能会。 我相信在构build期间我无法“挂载”任何东西。

它可能像这样工作:

  • 首先/新数据库启动:
    • 启动容器(没有安装)。
    • webapp创build一个数据库。
    • 停止容器
  • 随后的开始:
    • 使用-v启动容器来安装文件

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

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

*原因是你可以复制你的Dockerfile和数据库文件作为备份,并启动并运行这两个元素。

** 如何在构build期间将主机卷装入Dockerfile的Docker容器中

一种可行的方法是:

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

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

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