我有 Pi-Hole 和 Homepage 作为单独的 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 文件中的服务,因此这也不是一个有效的解决方案。
有办法做到这一点吗?
谢谢你。
解决方案是在启动时使用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 容器。