如何等待外部Docker服务健康后再启动另一个容器?

问题描述 投票:0回答:1

我有 Pi-HoleHomepage 作为单独的 docker-compose.yml 文件运行。

当我重新启动 Docker 主机时,主页在 Pi-Hole 之前完成加载。问题是 Pi-Hole 是我的 DNS 服务器,主页 UI 使用我在 Pi-Hole 中设置的域名记录。

两个容器都加载良好并显示状态为“健康”。但是,我必须手动重新启动主页容器才能正常工作,因为如果主页启动时 Pi-Hole 不在线,则无法正常工作。

需要明确的是:主页容器的状态为“健康”,即使它无法正常工作。

因此,我无法使用

restart:on-failure
,因为主页容器被认为是健康的并且不会关闭。

因此,我需要在 Homepage 容器启动之前运行 Pi-Hole 容器并将其标记为健康。

在 docker-compose-homepage.yml 中,我添加了以下行:

external_links:
      - pihole

...如这个 Stack Overflow 答案 中所述,但这似乎仅适用于同一 docker compose 文件中的服务。当然,depends-on 选项仅适用于同一 docker-compose 文件中的服务,因此这也不是一个有效的解决方案。

有办法做到这一点吗?

谢谢你。

docker docker-compose external restart
1个回答
0
投票

解决方案是在启动时使用wait-for-it

sudo apt install wait-for-it
crontab -e
@reboot wait-for-it IPaddress:port -- docker compose -f /path/to/docker-compose-homepage.yml restart

(其中 IPaddress:port 是 Docker 主机的 IP 地址和 Pi-Hole 的端口号。)

这意味着,系统启动时,它将运行 Wait For It 命令,该命令会等待指定的端口可用,一旦该端口可用,它将重新启动指定的 Docker 容器。

© www.soinside.com 2019 - 2024. All rights reserved.