rre*_*724 4 linux bash docker docker-compose
我们有一个安装程序的 bash 脚本,其中包括运行docker-compose文件。其中一个服务 RabbitMQ 需要一些时间来加载,我需要一个命令来等待它在加载其他服务之前加载。我们正在使用sleep命令,但我们的客户使用不同的笔记本电脑,因此加载某些命令比其他笔记本电脑需要更长的时间。有没有办法保持它直到它完成加载服务,然后再继续下一个而不使用sleep命令?我已经包含了下面的脚本部分。谢谢!
# Execute applications
cd /opt/program
docker-compose up -d
echo "waiting for message queue..."
sleep 15
echo "starting ingest manager"
cd /opt/program/scripts
chmod +x start-manager.sh
./start-manager.sh &
Run Code Online (Sandbox Code Playgroud)
正如其他答案中所述,您必须对容器进行特定于应用程序的准备情况检查。就我个人而言,我更喜欢将这些检查/脚本与容器映像一起提供,例如通过将wait-for-it.sh(参见ErikMD 的答案)或类似脚本添加到映像并在正在运行的容器中执行它们,例如 with docker exec(如Ahmed Arafa 的答案所提议的那样)。
与在主机上运行检查相比,这具有一些优势:
wget/curl可用主机,甚至是上bash/ shell是?docker/docker-compose在同一台主机作为泊坞窗守护程序,即可以在执行命令你通过localhost什么到达容器?)因此,要将此方法应用于您的示例,只需添加一个脚本 - 例如is_ready.sh- 到图像,在容器内执行它docker-compose exec并根据其退出状态采取行动:
# Execute applications
cd /opt/program
docker-compose up -d
echo "waiting for message queue..."
while ! docker-compose exec rabbitmq /is_ready.sh; sleep 1; done
echo "starting ingest manager"
cd /opt/program/scripts
chmod +x start-manager.sh
./start-manager.sh &
Run Code Online (Sandbox Code Playgroud)
哪里is_ready.sh可能是这样的:
#!/bin/bash
rabbitmqctl status
Run Code Online (Sandbox Code Playgroud)
变本加厉沿着这条道路,你可以利用的本地healtcheck特征码头工人和码头工人,撰写。这些docker将自动执行定义的健康检查脚本/命令并指示容器状态中的当前健康状况。
合并到您的脚本中,这可能如下所示:
# Execute applications
cd /opt/program
docker-compose up -d
echo "waiting for message queue..."
is_healthy() {
service="$1"
container_id="$(docker-compose ps -q "$service")"
health_status="$(docker inspect -f "{{.State.Health.Status}}" "$container_id")"
if [ "$health_status" = "healthy" ]; then
return 0
else
return 1
fi
}
while ! is_healthy rabbitmq; do sleep 1; done
echo "starting ingest manager"
cd /opt/program/scripts
chmod +x start-manager.sh
./start-manager.sh &
Run Code Online (Sandbox Code Playgroud)
在健康检查中定义 docker-compose.yml
...
services:
rabbitmq:
...
healtcheck:
test: rabbitmqctl status
Run Code Online (Sandbox Code Playgroud)
对于更复杂的健康检查,您还可以向图像添加更长的脚本并改为执行该脚本。
| 归档时间: |
|
| 查看次数: |
5869 次 |
| 最近记录: |