更新: 2026年03月 · 9 分で読める · 4,467 文字
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公式リポジトリ
おすすめAIリソース