Ubuntu Server のスタートアップ ≒ systemd
↓
systemd が docker.service を起動
↓
Docker が起動時に RestartPolicy: unless-stopped のコンテナを自動的に再起動
本来はUbuntu Serverを再起動すると、上記の仕組みでコンテナが自動で起動するのだが、時々起動しなかったり、コンテナが止まっていることがあるので、Windows側からSSH接続した時に、コンテナが全て起動しているかをチェックし、止まっているコンテナを起動するスクリプトを作成↓
systemd が docker.service を起動
↓
Docker が起動時に RestartPolicy: unless-stopped のコンテナを自動的に再起動
check_containers.sh ファイルを作成
nano /mnt/data/backup/scripts/check_containers.sh
#!/bin/bash
# 起動順序を考慮したコンテナチェック・自動起動スクリプト
# 起動順序を定義(上から順に起動)
CONTAINERS=(
"mirakurun"
"adguardhome"
"vaultwarden"
"passmanager-api"
"vafee2-lounge"
"immich_server"
"epgstation"
)
# Mirakurun の API が応答するまで待機する関数
wait_mirakurun() {
echo "Mirakurun API 応答待機中..."
for i in $(seq 1 30); do
if curl -s http://localhost:40772/api/version > /dev/null 2>&1; then
echo "✅ Mirakurun API 応答確認"
return 0
fi
sleep 5
done
echo "⚠️ Mirakurun API タイムアウト(150秒)"
return 1
}
FAILED=()
for c in "${CONTAINERS[@]}"; do
STATUS=$(docker inspect --format='{{.State.Status}}' "$c" 2>/dev/null)
if [ "$STATUS" != "running" ]; then
echo "❌ $c (${STATUS:-not found})"
FAILED+=("$c")
fi
done
# 停止中のコンテナを順番に自動起動
if [ ${#FAILED[@]} -gt 0 ]; then
echo "--- 自動起動を試みます ---"
for c in "${FAILED[@]}"; do
docker start "$c" 2>/dev/null && echo "✅ $c 起動しました" || echo "⚠️ $c 起動失敗"
# Mirakurun 起動後は EPGStation の前に API 応答を待機
if [ "$c" = "mirakurun" ]; then
wait_mirakurun
fi
done
fi
chmod +x /mnt/data/backup/scripts/check_containers.sh
.bashrc ファイルの最後に追記
nano ~/.bashrc
# コンテナ起動確認 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━" /mnt/data/backup/scripts/check_containers.sh 2>/dev/null echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
SSH接続時に読み込まれる .profile ファイルの作成
nano ~/.profile
# .bashrc を読み込む
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
これで、SSH接続時にスクリプトが走り、コンテナが全て起動しているかをチェックして、起動していなかったら順番も含め正常動作する様に起動する。