我们使用的是Phusion的baseimage-docker作为基本Docker
图像(实际上,我们使用passenger-docker image作为我们的基本图像,依次使用了baseimage-docker
和{{1 }}的讨论是在my_init
级别的。)
它有一个定义明确的过程,可以将我们自己的脚本插入到容器生命周期的baseimage-docker
,startup
和pre_shutdown
步骤中,就像documented here一样。照这样复制我们要在post_shutdown
中运行的脚本
Dockerfile
然后COPY app_startup.sh /etc/my_init.d/app_startup.sh
COPY app_pre_shutdown.sh /etc/my_init.pre_shutdown.d/app_pre_shutdown.sh
COPY app_post_shutdown.sh /etc/my_init.post_shutdown.d/app_post_shutdown.sh
将其作为流程的一部分。
深入研究my_init
脚本本身,我可以看到这些附加脚本的执行发生在哪里,例如在启动时,它在my_init
函数main: run_startup_files和函数run_startup_files中被调用您可以看到调用了添加到目录中的脚本。
类似地,我可以看到它们在哪里处理main
和pre_shutdown
。
我想知道有什么方法可以继续使用此post_shutdown
过程,并能够添加 post 启动步骤,该步骤调用为图像定义的脚本吗?这将不同于此过程中的最后一个启动步骤,而是在容器启动并运行并且my_init
个步骤直接执行(或位于该步骤的下游)之后执行的所有其他步骤之后,首先执行的操作之一它)在启动时已经完成。
我不是很肯定,但是在我看来my_init
确实会在整个容器的生命周期at this point内持续存在,因此不确定将此步骤添加到何处已经是{{1 }}。
我希望以一种与该my_init
流程已经工作的方式一致的方式进行此启动后步骤,而不需要维护自定义my_init
脚本,以便我们可以继续利用将来更新时的Phusion版本的脚本,但是如果目前没有其他方法可以使用,则建议您使用推荐的方法来修改和实现自己的my_init
脚本
在my_init
之外可能有一些可以利用的东西,这是标准Ubuntu服务器启动和运行过程的一部分,该过程在my_init
已经运行容器之后接管(通过command it spawns ),例如容器启动时的 cron式/一次性运行或其他无需替换或修改my_init
即可运行的 init-ish 步骤
想法?