我对bash相当陌生(几乎没有任何经验,我需要一些bash脚本的帮助。
我正在使用docker-compose创建多个容器-在此示例中,假设2个容器。第二个容器将执行bash命令,但在此之前,我需要检查第一个容器是否可操作且已完全配置。我不想使用sleep命令,而是要创建一个bash脚本,该脚本将位于第二个容器中,并在执行后执行以下操作:
我发现了如何在Java中执行此操作,但是如果需要在bash脚本中执行此操作。
Docker容器将alpine作为操作系统,但我更新了Dockerfile来安装bash。
我尝试了此解决方案,但它不起作用。
#!/bin/bash
[command to be executed] > allout.txt 2>&1
until
tail -n 0 -F /path/to/file | \
while read LINE
do
if echo "$LINE" | grep -q $string
then
echo -e "$string found in the console output"
fi
done
do
echo "String is not present. Executing command again"
sleep 5
[command to be executed] > allout.txt 2>&1
done
echo -e "String is found"
在docker-compose
文件中,请使用depends_on选项。
depends_on
将照顾您的多个容器的启动和关闭顺序。
但是在移动到另一个容器启动之前,它不会检查容器是否已准备就绪。要处理此情况,请检查this。
如link中所述,
OR
[如果您不想使用上述工具,请签出this。在这里,它们使用HEALTHCHECK和service_healthy
条件的组合,如here所示。有关完整的示例,请检查this。