ubuntu
カテゴリ
コンテナ起動確認スクリプト
2026/06/10 18時maintenance
Ubuntu Server のスタートアップ ≒ systemd

systemd が docker.service を起動

Docker が起動時に RestartPolicy: unless-stopped のコンテナを自動的に再起動
本来はUbuntu Serverを再起動すると、上記の仕組みでコンテナが自動で起動するのだが、時々起動しなかったり、コンテナが止まっていることがあるので、Windows側からSSH接続した時に、コンテナが全て起動しているかをチェックし、止まっているコンテナを起動するスクリプトを作成

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 これで、SSH接続時にスクリプトが走り、コンテナが全て起動しているかをチェックして、起動していなかったら順番も含め正常動作する様に起動する。
記事一覧