以下是一个使用 golang 编写的脚本,用于通过探测 RabbitMQ Docker Compose 容器端口来守护容器:
package main
import (
"fmt"
"net"
"os/exec"
)
func main() {
// RabbitMQ 容器默认监听 5672 端口
addr := "localhost:5672"
for {
conn, err := net.Dial("tcp", addr)
if err != nil {
// 如果连接失败,则启动 RabbitMQ 容器
startCmd := exec.Command("docker-compose", "up", "-d")
if err := startCmd.Run(); err != nil {
fmt.Printf("Error starting RabbitMQ container: %s\n", err)
} else {
fmt.Println("RabbitMQ container started.")
}
} else {
conn.Close()
}
// 每隔一段时间再次检查端口是否可用
time.Sleep(time.Minute * 5)
}
}
该脚本定期尝试通过 net.Dial()
函数与本地主机的 5672 端口建立 TCP 连接。如果连接失败,则说明 RabbitMQ 容器未运行或已停止,此时将使用 docker-compose up -d
命令启动容器。
您可以将此脚本放在一个定时任务中,以确保 RabbitMQ 容器始终处于运行状态。注意,在执行此脚本之前,请确保已经安装了 Docker Compose 并且具有足够的权限来管理 Docker 容器。