我怎样才能在一个容器中安装一个文件,这是第一次运行之前不可用?
我正在尝试为使用基于文件的数据库的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 ...
第一个容器应该立即退出,但设置在第二个容器中使用的卷。