3

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

他们的文档中可以看出,您可以通过使用您的服务名称创建一个文件夹来轻松添加/etc/service服务,即:/etc/service/jboss. 接下来,您必须chmod +x在该服务目录中创建一个名为的文件,该文件run将执行您的服务的启动。

我怎样才能做到这一点并确保服务不会在启动时启动?目标仍然是能够做sv start jboss,但不要让它在启动时启动。

4

3 回答 3

4

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

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

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"]
于 2015-05-05T21:32:45.577 回答
3

With phusion/baseimage:0.9.17 (not sure in which version it was introduced) you can bake RUN touch /etc/service/jboss/down in your Dockerfile. It prevents the runit from starting it on boot and you're still able to sv start jboss later.

于 2015-12-05T11:43:44.057 回答
0

我正在研究完全相同的问题(在容器中运行 Cassandra 时),但我还没有找到一个明确的答案。这是我想出的两种 hacky 方法。

run- 有一个早期的运行级别脚本,可以根据您是否希望在启动时启动某些文件来移入和移出文件。

-(错误)使用service控制命令之一runit实际启动您的服务并使用虚拟run命令绕过自动启动。

这两种方法显然都不太理想,但它们在某些用途上是有效的。

于 2015-05-05T00:03:22.293 回答