Bash Can';t在docker容器中不终止ssh服务器的情况下终止节点(js)进程

Bash Can';t在docker容器中不终止ssh服务器的情况下终止节点(js)进程,bash,docker,dockerfile,Bash,Docker,Dockerfile,我使用的Dockerfile以CMD[“/start.sh”]结尾: 如果出于某种原因我需要终止节点进程,ssh服务器也将被关闭(迫使我重新启动容器以重新连接) 有什么简单的方法可以避免这种行为吗 谢谢。一旦容器的主进程退出,容器就会退出。在您的例子中,容器内的主要进程是start.shshell脚本。sh shell脚本启动ssh服务,然后作为子进程运行nodejs进程。一旦nodejs进程结束,shell脚本也会退出,容器也会退出。因此,您可以做的是将nodejs进程放在后台 #!/bin/

我使用的Dockerfile以CMD[“/start.sh”]结尾:

如果出于某种原因我需要终止节点进程,ssh服务器也将被关闭(迫使我重新启动容器以重新连接)

有什么简单的方法可以避免这种行为吗


谢谢。

一旦容器的主进程退出,容器就会退出。在您的例子中,容器内的主要进程是
start.sh
shell脚本。sh shell脚本启动ssh服务,然后作为子进程运行nodejs进程。一旦nodejs进程结束,shell脚本也会退出,容器也会退出。因此,您可以做的是将nodejs进程放在后台

#!/bin/bash
service ssh start
/usr/bin/node /myApp/app.js &
# Need the following infinite loop as the shell script should not exit
while do:
   sleep 2
done
不过,我不推荐这种方法。每个容器应该只有一个进程。阅读以下答案以了解原因-


如果您仍然希望在容器中运行多个进程,有更好的方法可以做到这一点,比如使用supervisord-

我不想运行ssh守护进程。对待容器就像对待主机上没有Docker的相同
节点app.js
进程一样。感谢您提供的信息!我只需要ssh进行故障排除,因为我没有其他方法连接到此远程容器。
#!/bin/bash
service ssh start
/usr/bin/node /myApp/app.js &
# Need the following infinite loop as the shell script should not exit
while do:
   sleep 2
done