在后台运行Docker命令?

时间:2019-11-22 22:19:00

标签: docker

您将如何在Docker中运行守护进程或后台进程?我看到了一些建议,例如this answer,它可以从CMD启动主管。

但是,我正在尝试测试通过SSH连接的服务器配置工具。因此,我需要在后台启动SSH守护进程,然后运行我的tool.sh来测试通过SSH连接到其自己的容器的过程。我需要监视我的工具的输出以验证它是否正常工作。最好的方法是什么?

是否有任何方法可以使RUN命令在后台运行,例如RUN /usr/sbin/sshd -D &,还是我必须从CMD启动一些执行此类操作的包装脚本?

#!/bin/bash
/usr/sbin/sshd -D
tool.sh

1 个答案:

答案 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完成后容器会停留在周围,因此您可以登录并四处查看,同时还可以让脚本等待守护程序运行。

相关问题