我知道docker只监听pid 1,如果pid退出(或变成守护进程),它会认为程序退出并且容器已关闭。
当启动apache-spark时./start-master.sh
脚本如何让容器保持运行?
我不认为:while true; do sleep 1000;
完成是一个合适的解决方案。
E.g。我用command: sbin/start-master.sh
启动了主人。但它一直在关闭。
如何在使用docker-compose启动时保持运行状态?
答案 0 :(得分:1)
如“Use of Supervisor in docker”中所述,您可以使用phusion/baseimage-docker
作为基本映像,您可以在其中将脚本注册为“服务”。
该图像中包含的my_init
script将负责退出信号管理。
start-master.sh
启动的流程仍在运行
同样,假设您从apache-spark
开始构建phusion/baseimage-docker
图片。
由thaJeztah评论,使用现有图片也有效:gettyimages/spark/~/dockerfile/
。它的默认CMD将使容器保持运行。
这两个选项比依赖tail -f
技巧更清晰,后者无法优雅地处理终止/终止信号。
答案 1 :(得分:0)
tail -f -n 50 /path/to/spark/logfile
如果您运行-it
交互模式,这将使容器保持活动状态并提供有用信息。你可以运行-d
分离,它将保持活力。
答案 2 :(得分:0)
这是另一种解决方案。
创建具有以下内容的文件An exception that occurs when a response returns an error code equal to or greater than 400.
,并将其复制到spark conf目录中。
spark-env.sh
如果Dockerfile中的CMD如下所示:
SPARK_NO_DAEMONIZE=true
容器不会退出。