无法在不终止 docker 容器中的 ssh 服务器的情况下终止节点(js) 进程



我正在使用以CMD ["/start.sh"]结尾的Dockerfile:

#!/bin/bash
service ssh start
/usr/bin/node /myApp/app.js

如果由于某种原因我需要终止节点进程,则SSH服务器也会关闭(迫使我重新启动容器以重新连接(。

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

谢谢。

容器的主进程退出后,容器立即退出。在您的情况下,容器内的主要进程是start.shshell 脚本。start.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

不过,我不推荐这种方法。每个容器只能有一个进程。阅读以下答案以了解原因 -

在一个 docker 容器中运行多个应用程序

如果您仍然想在容器内运行多个进程,有更好的方法可以做到这一点,例如使用 supervisord - https://docs.docker.com/config/containers/multi-service_container/

相关内容

最新更新