docker 阻止 spark 容器退出

docker stop spark container from exiting

我知道 docker 只监听 pid 1,如果 pid 退出(或变成守护进程),它认为程序退出并且容器关闭。

当 apache-spark 启动时,./start-master.sh 脚本如何保留容器 运行?

我不认为:while true; do sleep 1000; done 是一个合适的解决方案。

例如我用command: sbin/start-master.sh启动了master。但是一直关机。

如何在使用 docker-compose 开始时保持它 运行?

如“", you could use phusion/baseimage-docker 作为基础映像所述,您可以在其中将脚本注册为 "services"。

该图像中包含的 my_init script 将负责退出信号管理。

并且 start-master.sh 启动的进程仍然是 运行。
同样,假设您正在从 phusion/baseimage-docker.

开始构建 apache-spark 图像

正如 thaJeztah, using an existing image works too: gettyimages/spark/~/dockerfile/ 评论的那样。它的默认 CMD 将保留容器 运行。

这两个选项都比依赖 tail -f 技巧更干净,后者不会优雅地处理 kill/exit 信号。

tail -f -n 50 /path/to/spark/logfile

这将使容器保持活动状态,并在您 运行 -it 交互模式下提供有用的信息。您可以 运行 -d 分离,它会保持活力。

这是另一种解决方案。 使用以下内容创建一个文件spark-env.sh并将其复制到spark conf目录中。

SPARK_NO_DAEMONIZE=true

如果您在 Dockerfile 中的 CMD 如下所示:

CMD ["/spark/sbin/start-master.sh"]

容器不会退出。