在Docker构build期间启动服务

我想在Docker构build期间启动一个服务。 我不需要这个服务在构build过程完成之后继续运行(或者我知道我可以使用CMD命令),但是我确实需要运行足够长的时间来执行第二个依赖于此服务的命令并运行。

更准确地说,我正在为ejabberd XMPP服务器编写一个Dockerfile,它也为这个服务器安装了一个模块。 我试图用ejabberdctl start启动ejabberd服务器,然后用ejabberdctl module_install实用程序安装模块,这取决于正在运行的节点。 它看起来像这样:

RUN ejabberdctl start && ejabberdctl modules_update_specs && ejabberdctl module_install ejabberd_auth_http 

现在我遇到了一个问题,我提出了两个可能的原因。 问题是我的版本不能从这一行开始工作,因为当第二个命令试图执行时节点closures了。 我得到以下错误,当您尝试使用ejabberdctl实用程序时,这是一个典型的错误,而不会实际启动节点:

失败的RPC连接到节点ejabberd @ localhost

命令'/ bin / sh -c ejabberdctl start && ejabberdctl modules_update_specs && ejabberdctl module_install ejabberd_auth_http'返回了一个非零的代码:3

这可能是因为服务的启动需要一些时间,比第二个命令执行所需要的时间要长,所以第二个命令会运行到正在启动的节点。 不知道这有多可能。 第二个原因可能是在构build过程中,依赖于init.d的服务的启动在Docker中不起作用。

我build立容器,直到导致问题的那一行,进入容器并手动执行命令,并且所有事情都按照它应该的那样工作。

所以总结一下,我想在构build期间启动ejabberd服务器,然后使用其控制工具来安装一些东西。 最后一个select是在没有运行服务器的情况下手动安装模块,但是我宁愿使用ejabberdctl控制工具来完成。