mel*_*ejb 5 ejabberd docker dockerfile docker-build
我想在 Docker 构建期间启动一个服务。我不需要此服务在构建过程完成后继续运行(或者我知道我可以为此使用 CMD 命令),但是我确实需要它运行足够长的时间来执行依赖此服务的第二个命令和运行。
更准确地说,我正在尝试为 ejabberd XMPP 服务器编写一个 Dockerfile,它也为此服务器安装了一个模块。我正在尝试使用 ejabberdctl start 启动 ejabberd 服务器,然后使用 ejabberdctl module_install 实用程序安装该模块,这取决于正在启动和运行的节点。它看起来像这样:
RUN ejabberdctl start && ejabberdctl modules_update_specs && ejabberdctl module_install ejabberd_auth_http
Run Code Online (Sandbox Code Playgroud)
现在我遇到了一个问题,我想出了两个可能的原因。问题是我的构建从这一行开始不起作用,因为当第二个命令尝试执行时节点已关闭。我收到以下错误,这是您尝试使用 ejabberdctl 实用程序时的典型错误,而节点实际上并未启动:
与节点 ejabberd@localhost 的 RPC 连接失败
命令“/bin/sh -c ejabberdctl start && ejabberdctl modules_update_specs && ejabberdctl module_install ejabberd_auth_http”返回非零代码:3
这可能是因为服务的启动时间比执行第二个命令所需的时间长一点,所以第二个命令运行到一个刚刚启动的节点。不确定这有多大可能。第二个原因可能是依赖于 init.d 的服务的启动在构建过程中在 Docker 中不起作用。
我构建容器直到导致问题的那一行,进入容器并手动执行命令,一切正常。
总而言之,我想在构建期间启动 ejabberd 服务器,然后使用其控制实用程序来安装一些东西。最后一个选项是在不运行服务器的情况下手动安装模块,但是我更喜欢使用 ejabberdctl 控制实用程序来执行此操作。
这些*ctl程序通常附带一些实用程序来启动/停止/监视服务的状态。
如果你的情况我认为最好的想法是有一个简单的 bash 脚本,你可以在构建时运行它来执行以下操作:
看这个:
root@158479dec020:/# ejabberdctl 状态 与节点 ejabberd@158479dec020 的 RPC 连接失败:nodedown root@158479dec020:/# echo $? 3 root@158479dec020:/# ejabberdctl 启动 root@158479dec020:/# echo $? 0 root@158479dec020:/# ejabberdctl 状态 节点 ejabberd@158479dec020 已启动,状态为:已启动 ejabberd 16.01 正在该节点中运行 root@158479dec020:/# echo $? 0 root@158479dec020:/# ejabberdctl 停止 root@158479dec020:/# echo $? 0 root@158479dec020:/# ejabberdctl 状态 与节点 ejabberd@158479dec020 的 RPC 连接失败:nodedown root@158479dec020:/# echo $? 3
因此,这告诉我们,如果您运行 aejabberd status并且守护进程未运行,您会收到 exit code 3,0如果它已启动并正在运行。
你的 bash 脚本就到这里了:
函数运行(){
ejabberdctl start # 重复以防万一...
ejabberdctl 状态 &>/dev/null
如果 [ $? -eq 0];然后
echo“在这里施展一些魔法,ejabberd 正在运行……”
出口0
菲
echo “Ejabberd 还在地上……”
}
虽然是真的;跑步;睡觉1;完毕
这就是您在 CLI 中得到的结果:
root@158479dec020:/# ./check.sh 埃贾伯德还在倒地…… 在这里施展魔法,ejabberd 正在运行…… root@158479dec020:/# ejabberdctl 停止 root@158479dec020:/# ./check.sh 埃贾伯德还在倒地…… 埃贾伯德还在倒地…… 在这里施展魔法,ejabberd 正在运行……
| 归档时间: |
|
| 查看次数: |
961 次 |
| 最近记录: |