创建一个不会自动启动的runit服务

时间:2015-01-30 20:57:30

标签: docker runit

我正在开发一个基于Phusion的baseimage构建的Docker容器,它需要有许多服务只能按需启动。我希望这些服务保留为runit服务,我只是希望它们不会在启动时自动启动。

in their documentation所示,您可以通过在/etc/service中创建一个包含服务名称的文件夹来轻松添加服务,即:/etc/service/jboss。接下来,您必须在名为chmod +x的服务目录中创建并run一个文件,该文件将执行您的服务启动。

如何执行此操作并确保服务不会启动时启动?目标仍然是能够sv start jboss,但不能在启动时启动。

3 个答案:

答案 0 :(得分:4)

将您的服务添加到/etc/sv/<SERVICE_NAME>/并添加run可执行文件就像您现在所做的那样。当您准备好运行该服务时,只需将其符号链接到/etc/service,runit就会将其提取并开始自动运行。

这是一个简短的(非优化的)Dockerfile,显示已禁用的服务和已启用的服务。启用的服务将在Docker运行时启动。禁用的服务在符号链接到/etc/service之前不会启动,此时runit将在五秒钟内启动它。

FROM phusion/baseimage

RUN mkdir /etc/sv/disabled_service
ADD disabled_service.sh /etc/sv/disabled_service/run
RUN chmod 700 /etc/sv/disabled_service/run

RUN mkdir /etc/sv/enabled_service
ADD enabled_service.sh /etc/sv/enabled_service/run
RUN chmod 700 /etc/sv/enabled_service/run
RUN ln -s /etc/sv/enabled_service /etc/service/enabled_service

CMD ["/sbin/my_init"]

答案 1 :(得分:3)

使用phusion/baseimage:0.9.17(不确定引入的是哪个版本),您可以在Dockerfile中烘焙RUN touch /etc/service/jboss/down。它可以防止runit在启动时启动它,你以后仍然可以sv start jboss

答案 2 :(得分:0)

我正在查看完全同样的问题(在容器中运行Cassandra时),我还没有找到一个干净的答案。以下是我提出的两种黑客方式。

- 有一个早期的运行级别脚本,可以根据你是否想要在启动时启动一些文件来移出run文件。

- (mis)使用其中一个service控件命令runit 实际启动服务并使用虚拟run命令绕过自动启动。

这两种方法显然都不太理想,但它们已经用于某些目的。