您将如何在Docker中运行守护进程或后台进程?我看到了一些建议,例如this answer,它可以从CMD启动主管。
但是,我正在尝试测试通过SSH连接的服务器配置工具。因此,我需要在后台启动SSH守护进程,然后运行我的tool.sh
来测试通过SSH连接到其自己的容器的过程。我需要监视我的工具的输出以验证它是否正常工作。最好的方法是什么?
是否有任何方法可以使RUN命令在后台运行,例如RUN /usr/sbin/sshd -D &
,还是我必须从CMD启动一些执行此类操作的包装脚本?
#!/bin/bash
/usr/sbin/sshd -D
tool.sh
答案 0 :(得分:0)
您可以在docker容器中运行守护程序,就像在裸机linux机器上一样。唯一困难的部分是没有好的运行级别脚本来帮助它启动。
如何?
#!/bin/sh
function run_script() {
ssh_pids=0
while [ ${ssh_pids} -lt 1 ]; do
sleep 5
ssh_pids=$(pgrep sshd | wc -l)
done
test.sh
}
run_script &
sshd -D > /dev/null 2>&1
我以前使用过这个技巧来做您所描述的事情,并且效果很好。它只会在对run_script
的调用中后台运行,并以非守护程序模式继续启动SSHD,并将其管道传输到/dev/null
。同时,run_script
轮询sshd
;找到它后,它将退出轮询并运行test.sh
,该终端应该仍为stdout
,因为它具有终端。 test.sh
完成后,您可能需要使用一些外部终止信号来停止整个操作。
如果您不喜欢这个傻瓜,另一个选择就是按照您描述的去做:编写一个包装器脚本以用作CMD / ENTRYPOINT,并让它启动SSHD 而无需进行调试标记,然后启动test.sh
。
使用我发布的脚本来执行此操作的优点是,test.sh
完成后容器会停留在周围,因此您可以登录并四处查看,同时还可以让脚本等待守护程序运行。