如何检测docker run和底层守护进程是否以编程方式完全启动?

时间:2019-02-12 10:09:58

标签: bash docker

我正在运行Virtuoso泊坞窗,然后在其上加载数据。

我在bash脚本中拥有了所有这些。 由于该命令按顺序运行,因此加载数据通常会失败,因为Virtuoso尚未完全启动。

简单的解决方案是添加一个延迟(睡眠),它可以工作。不过,这是一个肮脏的解决方案。

我找到了这个命令

docker inspect -f {{.State.Running}} $CONTAINER_ID

但这只能告诉容器是否正在运行。

是否有办法在加载数据之前检查docker上的守护进程是否已完全启动(在本例中为Virtuoso)?

2 个答案:

答案 0 :(得分:1)

您可以使用wait-for-it脚本检查TCP端口是否打开:

container_ip = $(docker inspect --format "{{range .NetworkSettings.Networks}}{{ .IPAddress }}{{end}}") $CONTAINER_ID
until $(./wait-for-it.sh $container_ip:<virtuoso_port> --timeout=1)
do 
 echo "Virtuoso is not responding"; 
done;

答案 1 :(得分:1)

通用过程是为您的应用程序定义运行状况检查,然后检查运行状况:

docker inspect --format '{{.State.Health.Status}}' $container_id

所需的输出为healthy

有关如何为图像定义健康检查的详细信息,请参见https://docs.docker.com/engine/reference/builder/#healthcheck

您为运行状况检查定义的实际命令会因容器内正在运行的应用程序而异。