基于触发条件自动重启Docker容器的方案咨询
解决Synology NAS上Docker容器(Plex/xTeVe)无响应但健康检查正常的重启方案
一、自动检测重启方案
针对容器无响应但默认健康检查未触发的问题,可通过自定义检测逻辑实现自动重启:
1. 定时执行自定义检测脚本
在Synology NAS的「任务计划」中添加定时任务,周期性检测服务可用性,失败则重启容器:
- 编写检测脚本(保存为
check_and_restart.sh):
#!/bin/bash # 配置NAS IP和容器路径 NAS_IP="192.168.1.100" COMPOSE_PATH="/volume1/docker/media" # 检测Plex服务 curl -s --connect-timeout 5 "http://${NAS_IP}:32400/web" > /dev/null if [ $? -ne 0 ]; then docker-compose -f "${COMPOSE_PATH}/docker-compose.yml" restart plex fi # 检测xTeVe服务 curl -s --connect-timeout 5 "http://${NAS_IP}:34400" > /dev/null if [ $? -ne 0 ]; then docker-compose -f "${COMPOSE_PATH}/docker-compose.yml" restart xteve fi
- 给脚本添加执行权限:
chmod +x check_and_restart.sh - 在Synology任务计划中创建「用户定义的脚本」,设置每5分钟执行一次,执行用户选择有Docker操作权限的账号(如admin)。
2. 监控工具联动Webhook重启
用Uptime Kuma(可部署在Docker或你的Web服务器)监控服务端口,触发宕机时调用Webhook执行重启:
- 在Uptime Kuma中添加Plex/xTeVe的监控项,设置检测端口(32400/34400)
- 配置Webhook动作,当监控状态变为「宕机」时,调用你Web服务器上的重启脚本(脚本逻辑同上面的SSH执行命令)
二、家属友好型手动触发方案
1. 简易网页按钮
在你的Web服务器上部署一个极简页面,点击按钮即可触发重启:
- 前端HTML(
restart.html):
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>媒体服务器重启</title> <style>button{padding:10px 20px;font-size:18px;margin:10px;}</style> </head> <body> <h3>媒体服务器重启工具</h3> <button onclick="restartService('plex')">重启Plex</button> <button onclick="restartService('xteve')">重启xTeVe</button> <script> function restartService(service) { fetch(`/restart.php?service=${service}`) .then(res => res.text()) .then(msg => alert(msg)); } </script> </body> </html>
- 后端PHP脚本(
restart.php):
<?php $service = $_GET['service'] ?? ''; if (!in_array($service, ['plex', 'xteve'])) { echo "无效服务"; exit; } // 配置NAS登录信息(提前配置Web服务器免密SSH登录NAS) $nasUser = "admin"; $nasIp = "192.168.1.100"; $composePath = "/volume1/docker/media"; $command = "ssh {$nasUser}@{$nasIp} \"cd {$composePath} && docker-compose restart {$service}\""; exec($command); echo "{$service}正在重启,请稍等..."; ?>
- 提前配置Web服务器的用户免密登录NAS:将Web服务器的公钥添加到NAS用户的
~/.ssh/authorized_keys文件中。
2. 智能家居物理/虚拟按钮
如果部署了HomeAssistant,可添加一键重启按钮:
- 在
configuration.yaml中添加配置:
# 定义重启命令 shell_command: restart_plex: 'ssh admin@192.168.1.100 "cd /volume1/docker/media && docker-compose restart plex"' restart_xteve: 'ssh admin@192.168.1.100 "cd /volume1/docker/media && docker-compose restart xteve"' # 创建虚拟按钮 input_button: restart_plex: name: 重启Plex服务器 icon: mdi:server-restart restart_xteve: name: 重启xTeVe服务器 icon: mdi:server-restart
- 重启HomeAssistant后,在控制面板添加这两个按钮;如果有物理智能按钮(如Aqara、小米开关),可关联按钮触发对应的
shell_command。
3. Alexa语音指令
通过HomeAssistant关联Alexa,实现语音触发重启:
- 在HomeAssistant的「设置-设备与服务」中添加Alexa集成,将上述
input_button暴露给Alexa - 在Alexa APP中创建自定义语音指令,比如“重启Plex服务器”关联HomeAssistant的「重启Plex服务器」按钮
- 家属只需说“Alexa,重启Plex服务器”即可触发容器重启
内容的提问来源于stack exchange,提问作者astorm
相关产品推荐
相关产品推荐

