#!/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