Docker 是否有一个好的、标准的方法来;“引导”;集装箱化应用程序?

Docker 是否有一个好的、标准的方法来;“引导”;集装箱化应用程序?,docker,Docker,我正在处理一个应用程序,它需要在第一次运行时初始化 实际上,这将使用一些起始值初始化数据库,并将一些文件保存在持久卷中。如果我停止容器,然后重新启动它,我不想重新运行引导例程。换句话说,如果容器存在并已填充,则跳过初始化例程 我要实现这一点的方法是使用一个入口点脚本来检查配置文件是否存在,如果存在,将跳过引导例程,但是,我想知道是否有更好的方法来实现它 例如,是否有一种方法可以运行因需要创建卷而专门触发的脚本?如果我能做到这一点,我运行引导程序的唯一情况就是应用程序第一次初始化时 或者,是否有一

我正在处理一个应用程序,它需要在第一次运行时初始化

实际上,这将使用一些起始值初始化数据库,并将一些文件保存在持久卷中。如果我停止容器,然后重新启动它,我不想重新运行引导例程。换句话说,如果容器存在并已填充,则跳过初始化例程

我要实现这一点的方法是使用一个入口点脚本来检查配置文件是否存在,如果存在,将跳过引导例程,但是,我想知道是否有更好的方法来实现它

例如,是否有一种方法可以运行因需要创建卷而专门触发的脚本?如果我能做到这一点,我运行引导程序的唯一情况就是应用程序第一次初始化时

或者,是否有一种更好的、更加Dockerish的模式来定义我应该如何处理这个问题?

“如果文件不存在,则在入口点脚本中进行初始化”似乎是一种合理的习惯用法。例如,检查
$PGDATA/pgu版本的文件

假设这看起来像:

#/垃圾箱/垃圾箱
如果[!-f/data/config.ini];然后
/opt/myapp/setup-data.sh/data
fi
执行官“$@”
请记住,出于各种原因删除和重新创建容器是非常常规的(IME停止和启动操作很少,但其中一些是Docker早期养成的习惯);这与您使用入口点的直觉密切相关,因为它将在每次
docker运行时启动。在容器中,你无法真正分辨目录是否是卷,也没有任何可以绑定的挂钩;在入口点开始时,容器环境已经完全设置好,并且已经连接了任何网络和卷