Files
docker-configs/startup_docker_services.sh
2025-07-29 00:00:01 -05:00

78 lines
2.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Docker 服务开机后启动脚本
# 用于在系统启动后自动启动所有 Docker 服务
echo "$(date): 开始启动 Docker 服务..." | tee -a /var/log/docker-startup.log
# 等待 Docker 守护进程启动
echo "$(date): 等待 Docker 守护进程启动..." | tee -a /var/log/docker-startup.log
while ! docker info >/dev/null 2>&1; do
echo "$(date): Docker 守护进程尚未就绪等待5秒..." | tee -a /var/log/docker-startup.log
sleep 5
done
echo "$(date): Docker 守护进程已就绪" | tee -a /var/log/docker-startup.log
# Docker 服务目录列表(按优先级排序)
DOCKER_DIRS=(
"/home/will/docker/caddy" # 反向代理,最先启动
"/home/will/docker/vault" # 密码管理
"/home/will/docker/HA" # Home Assistant
"/home/will/docker/clove" # 文件管理
"/home/will/docker/navidrome" # 音乐服务
"/home/will/docker/jellyfin" # 媒体服务
"/home/will/docker/1panel" # 管理面板
"/home/will/docker/silly" # AI 对话
"/home/will/docker/discord_bot" # Discord 主机器人
"/home/will/docker/discord_bot/ai_bots" # AI 机器人(如果需要)
"/home/will/docker/adwireguard" # VPN 服务
# "/home/will/docker/backtest" # 回测服务 - 手动启动
)
# 函数:启动 Docker Compose 服务
start_docker_service() {
local dir="$1"
if [[ -f "$dir/docker-compose.yml" ]]; then
echo "$(date): 启动服务: $dir" | tee -a /var/log/docker-startup.log
cd "$dir"
# 使用 timeout 防止卡住adwireguard 需要更长时间
if [[ "$dir" == *"adwireguard"* ]]; then
timeout 180 docker compose up -d
else
timeout 120 docker compose up -d
fi
if [[ $? -eq 0 ]]; then
echo "$(date): 成功启动: $dir" | tee -a /var/log/docker-startup.log
else
echo "$(date): 启动失败或超时: $dir" | tee -a /var/log/docker-startup.log
fi
else
echo "$(date): 跳过 (无 docker-compose.yml): $dir" | tee -a /var/log/docker-startup.log
fi
}
# 启动所有服务
for dir in "${DOCKER_DIRS[@]}"; do
if [[ -d "$dir" ]]; then
start_docker_service "$dir"
else
echo "$(date): 目录不存在: $dir" | tee -a /var/log/docker-startup.log
fi
# 每个服务之间等待5秒让服务有时间启动
sleep 5
done
# 清理未使用的资源
echo "$(date): 清理未使用的Docker资源..." | tee -a /var/log/docker-startup.log
docker image prune -f
echo "$(date): Docker 服务启动完成" | tee -a /var/log/docker-startup.log
# 显示运行状态
echo "$(date): 当前运行的容器:" | tee -a /var/log/docker-startup.log
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | tee -a /var/log/docker-startup.log