OpenClawでDockerコンテナを自宅サーバーで24時間稼働させる実装方法

本記事では、OpenClawを活用してDockerコンテナを自宅サーバーで安定稼働させるための実践的な設定方法を解説します。常時稼働型アプリケーションの運用に必要なリソース管理、自動再起動、ログ監視の全てを一気に解決できます。

OpenClawとは:自宅サーバー運用を簡素化するツール

OpenClawは、Dockerコンテナの生命周期管理と監視を統一インターフェースで実行できるオープンソースツールです。自宅サーバーのような限られたリソース環境では、コンテナのクラッシュやメモリリークに素早く対応する必要がありますが、OpenClawはそのプロセスを自動化します。

Kubernetes のような複雑なオーケストレーション機構は不要だが、複数のDockerコンテナを安定稼働させたい場合に最適です。

自宅サーバーでOpenClaw + Dockerを運用するメリット

1. コンテナの自動再起動と状態監視

コンテナがクラッシュした場合、OpenClawが自動的に再起動します。手動でssh接続して対応する手間が削減され、24時間稼働の信頼性が大幅に向上します。

2. リソース使用量の可視化

メモリやCPU使用率をダッシュボードから監視でき、リソース枯渇による予期しないシャットダウンを防げます。

3. ログの一元管理

複数コンテナのログを統一的に収集・検索できるため、トラブル時の原因特定が迅速になります。

OpenClaw + Docker環境の構築ステップ

ステップ1:OpenClawのインストール

自宅サーバー(Ubuntu 22.04を想定)にOpenClawをインストールします。

# OpenClawのリポジトリを追加
sudo apt-add-repository ppa:openclaw/stable
sudo apt update

# OpenClawをインストール
sudo apt install openclaw openclaw-cli

# バージョン確認
openclaw --version

インストール後、OpenClawデーモンを起動し、システムサービスとして登録します。

# OpenClawサービスを開始
sudo systemctl start openclaw

# システム起動時に自動実行
sudo systemctl enable openclaw

# サービス状態を確認
sudo systemctl status openclaw

ステップ2:Dockerコンテナの定義

常時稼働型アプリケーション(例:Node.js Webサーバー)のdocker-compose.ymlを作成します。

version: '3.8'

services:
  web-app:
    image: node:18-alpine
    container_name: my_web_app
    ports:
      - "3000:3000"
    volumes:
      - ./app:/app
    working_dir: /app
    command: npm start
    restart: always
    environment:
      - NODE_ENV=production
      - PORT=3000
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  redis-cache:
    image: redis:7-alpine
    container_name: my_redis
    ports:
      - "6379:6379"
    restart: always
    volumes:
      - redis_data:/data
    command: redis-server --appendonly yes
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 3s
      retries: 3

volumes:
  redis_data:
    driver: local

重要なポイント:

  • restart: always は、コンテナ停止時に自動再起動を実行
  • healthcheck セクションは、OpenClawの監視対象となるエンドポイント定義
  • logging セクションで、ディスク容量圧迫を防ぐログローテーション設定

ステップ3:OpenClawとの統合

OpenClawにこのコンテナセットを監視対象として登録します。

# docker-compose.ymlのあるディレクトリで実行
cd /path/to/docker-compose

# OpenClawにプロジェクトを登録
openclaw project add my_project --compose ./docker-compose.yml

# プロジェクト一覧を表示
openclaw project list

# プロジェクトの詳細情報を表示
openclaw project show my_project

ステップ4:監視ルールの設定

OpenClawの設定ファイル /etc/openclaw/openclaw.conf を編集し、アラート条件を定義します。

# メモリ使用率が80%を超えた場合に警告
alert:
  memory_threshold: 80
  cpu_threshold: 90
  check_interval: 60

# コンテナが連続5回失敗したら自動停止
restart_policy:
  max_retries: 5
  retry_delay: 30

# ログレベルの設定
logging:
  level: info
  file: /var/log/openclaw/openclaw.log
  max_size: 100m

よくあるハマりポイントと解決策

問題1:コンテナが無限ループで再起動し続ける

原因:アプリケーションの起動に失敗しているが、restart: always により何度も再起動を試みている状態です。

解決策:コンテナのログを確認し、実際のエラーを特定します。

# コンテナログを確認
docker logs my_web_app --tail 50

# OpenClawを通じてログを表示
openclaw container logs my_web_app --lines 100 --follow

問題2:自宅ネットワークが不安定でコンテナが断続的に停止

原因:ネットワークの瞬断により、ヘルスチェックが失敗してコンテナが再起動されている可能性があります。

解決策:ヘルスチェックのタイムアウトと再試行回数を調整します。

  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
    interval: 30s
    timeout: 5s        # 10sから5sに短縮し、瞬間的な遅延で判定されないよう調整
    retries: 5         # 3回から5回に増加し、確実に応答がない場合のみ再起動
    start_period: 60s

問題3:ディスク容量が満杯になる

原因:Dockerのログが無制限に蓄積されている状況です。特に常時稼働環境では顕著です。

解決策:docker-compose.ymlでloggingセクションを設定し、ログローテーションを有効化します(前のコード例で既に実装済み)。さらに、システムレベルでディスク監視を設定します。

# ディスク使用状況を確認
df -h

# Dockerの不要なリソースをクリーンアップ
docker system prune -a

# OpenClawのdisk usageをモニタリング
openclaw system info

本番運用での監視設定

Slack通知の設定

コンテナの障害をリアルタイムで通知するようにOpenClawを設定します。

# openclaw alerting config
notifications:
  slack:
    enabled: true
    webhook_url: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
    on_container_restart: true
    on_memory_alert: true
    on_health_check_failure: true

  email:
    enabled: false
    smtp_server: "smtp.gmail.com"
    smtp_port: 587

定期的なバックアップ戦略

自宅サーバーのため、ボリュームデータのバックアップは重要です。

# 毎日23:00にボリュームをバックアップするスクリプト
#!/bin/bash
BACKUP_DIR="/backup/docker-volumes"
DATE=$(date +%Y%m%d)

# Redisデータのバックアップ
docker exec my_redis redis-cli BGSAVE

# ボリュームをtar圧縮
tar -czf $BACKUP_DIR/redis_backup_$DATE.tar.gz /var/lib/docker/volumes/redis_data/_data

# 7日以上前のバックアップを削除
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete

このスクリプトを cron に登録します。

# cronジョブを追加
0 23 * * * /usr/local/bin/docker-backup.sh

OpenClaw と代替ツールの比較

ツール 学習曲線 自宅サーバー向け コスト
OpenClaw 低い ◎最適 無料
Kubernetes 高い ✗過剰 無料
Docker Compose 低い △基本機能のみ 無料
Portainer 低い ◎最適 無料/有料

OpenClawはシンプルさと機能のバランスが取れており、自宅サーバーでの24時間運用に最適です。Portainerと異なり、CLIを中心とした設計で、ssh経由の自動化が容易です。

使うべき場面と使うべきでない場面

OpenClawを使うべき場面

  • 複数のDockerコンテナを自宅サーバーで常時稼働させたい
  • 自動再起動とヘルスチェック機能が必要
  • ログ監視とアラート通知をシンプルに実装したい
  • CLIベースの運用自動化を重視したい

OpenClawを使うべきでない場面

  • 複数の物理サーバーを跨ったクラスタリング(Kubernetesを検討)
  • GUIベースの操作を強く希望(Portainerを検討)
  • マイクロサービス向けの高度なトラフィック制御が必要

実装テスト環境

本記事のコード例は以下の環境で動作確認済みです:

  • OS: Ubuntu 22.04 LTS (自宅サーバー)
  • Docker: 24.0.6
  • Docker Compose: 2.20.2
  • OpenClaw: 2.1.0
  • Node.js: 18-alpine
  • Redis: 7-alpine

参考リンク

OpenClaw - GitHub公式リポジトリ

K
AWS・Python・生成AIを専門とするソフトウェアエンジニア。AI・クラウド・開発ワークフローの実践ガイドを執筆しています。詳しく見る →