コンテンツにスキップ

OpenClawをPodmanで構築:ルートレスで安全に実行する方法

コンテナを動かすとき、セキュリティや権限の管理で悩むことはありませんか?特にルート権限を使わずに安全に運用したい場合、設定が少し複雑に感じられるかもしれません。

OpenClaw Gateway を rootless な Podman コンテナで動かすことで、セキュリティを確保しながらスムーズに環境を構築できます。Docker と同じイメージ(リポジトリの Dockerfile からビルド)を使用するため、移行も簡単です。

  • Podman (rootless)
  • 初回セットアップ用の Sudo 権限(ユーザー作成、イメージ作成のため)

1. 初回セットアップ(リポジトリのルートで実行。ユーザー作成、イメージビルド、起動スクリプトのインストールを行います):

Terminal window
./setup-podman.sh

これにより、最小限の ~openclaw/.openclaw/openclaw.json も作成され(gateway.mode="local" に設定)、ウィザードを実行しなくても Gateway を開始できるようになります。

デフォルトでは、コンテナは Systemd サービスとしてインストールされません。手動で起動する必要があります(下記参照)。自動起動や再起動が必要な本番環境のようなセットアップには、代わりに Systemd Quadlet ユーザーサービスとしてインストールしてください。

Terminal window
./setup-podman.sh --quadlet

(または OPENCLAW_PODMAN_QUADLET=1 を設定します。コンテナと起動スクリプトのみをインストールする場合は --container を使用してください。)

ビルド時に使用できるオプションの環境変数(setup-podman.sh を実行する前に設定):

  • OPENCLAW_DOCKER_APT_PACKAGES — イメージビルド中に追加の apt パッケージをインストールします
  • OPENCLAW_EXTENSIONS — 拡張機能の依存関係を事前インストールします(スペース区切りの拡張機能名、例: diagnostics-otel matrix)

2. Gateway の起動(手動、クイックテスト用):

Terminal window
./scripts/run-openclaw-podman.sh launch

3. オンボーディングウィザード(チャネルやプロバイダーを追加する場合など):

Terminal window
./scripts/run-openclaw-podman.sh launch setup

その後、 http://127.0.0.1:18789/ を開き、 ~openclaw/.openclaw/.env にあるトークン(またはセットアップ時に表示された値)を使用してください。

./setup-podman.sh --quadlet(または OPENCLAW_PODMAN_QUADLET=1)を実行した場合、Podman Quadlet ユニットがインストールされ、Gateway は openclaw ユーザーの Systemd ユーザーサービスとして実行されます。サービスはセットアップの最後に有効化され、開始されます。

  • 開始: sudo systemctl --machine openclaw@ --user start openclaw.service
  • 停止: sudo systemctl --machine openclaw@ --user stop openclaw.service
  • ステータス: sudo systemctl --machine openclaw@ --user status openclaw.service
  • ログ: sudo journalctl --machine openclaw@ --user -u openclaw.service -f

Quadlet ファイルは ~openclaw/.config/containers/systemd/openclaw.container に配置されます。ポートや環境変数を変更するには、そのファイル(またはそれが読み込む .env)を編集し、 sudo systemctl --machine openclaw@ --user daemon-reload を実行してサービスを再起動してください。openclaw ユーザーの lingering が有効な場合(loginctl が利用可能な場合、セットアップ時に設定されます)、サービスは起動時に自動的に開始されます。

初回セットアップで Quadlet を使用しなかった場合に、後から追加するには、 ./setup-podman.sh --quadlet を再実行してください。

openclaw ユーザー (ログイン不可)

Section titled “openclaw ユーザー (ログイン不可)”

setup-podman.sh は、専用のシステムユーザー openclaw を作成します。

  • シェル: nologin — インタラクティブなログインを不可にすることで、攻撃対象領域を減らします。

  • ホームディレクトリ: 例: /home/openclaw — ~/.openclaw(設定、ワークスペース)と起動スクリプト run-openclaw-podman.sh を保持します。

  • Rootless Podman: ユーザーには subuid と subgid の範囲が必要です。多くのディストリビューションでは、ユーザー作成時にこれらが自動的に割り当てられます。セットアップ時に警告が表示された場合は、 /etc/subuid と /etc/subgid に以下の行を追加してください。

    openclaw:100000:65536

    その後、そのユーザーとして Gateway を起動します(例: cron や Systemd から):

    Terminal window
    sudo -u openclaw /home/openclaw/run-openclaw-podman.sh
    sudo -u openclaw /home/openclaw/run-openclaw-podman.sh setup
  • 設定: openclaw ユーザーと root のみが /home/openclaw/.openclaw にアクセスできます。設定を編集するには、Gateway 実行中に Control UI を使用するか、 sudo -u openclaw $EDITOR /home/openclaw/.openclaw/openclaw.json を使用してください。

  • トークン: ~openclaw/.openclaw/.env に OPENCLAW_GATEWAY_TOKEN として保存されます。 setup-podman.sh と run-openclaw-podman.sh は、トークンがない場合に生成します(openssl, python3, または od を使用)。
  • オプション: その .env ファイルで、プロバイダーのキー(例: GROQ_API_KEY, OLLAMA_API_KEY)やその他の OpenClaw 環境変数を設定できます。
  • ホストポート: デフォルトでは、スクリプトは 18789 (Gateway) と 18790 (Bridge) をマッピングします。起動時に OPENCLAW_PODMAN_GATEWAY_HOST_PORT と OPENCLAW_PODMAN_BRIDGE_HOST_PORT を指定することで、ホスト側のポートマッピングを上書きできます。
  • Gateway のバインド: デフォルトでは、 run-openclaw-podman.sh は安全なローカルアクセスのために --bind loopback で Gateway を起動します。LAN 上に公開するには、 OPENCLAW_GATEWAY_BIND=lan を設定し、 openclaw.json で gateway.controlUi.allowedOrigins を設定(または host-header fallback を明示的に有効化)してください。
  • パス: ホストの設定とワークスペースのデフォルトは ~openclaw/.openclaw と ~openclaw/.openclaw/workspace です。起動スクリプトで使用されるホストパスを上書きするには、 OPENCLAW_CONFIG_DIR と OPENCLAW_WORKSPACE_DIR を使用します。
  • 永続的なホストデータ: OPENCLAW_CONFIG_DIR と OPENCLAW_WORKSPACE_DIR はコンテナにバインドマウントされ、ホスト上に状態を保持します。
  • 一時的な sandbox tmpfs: agents.defaults.sandbox を有効にすると、ツール sandbox コンテナは /tmp, /var/tmp, /run に tmpfs をマウントします。これらのパスはメモリ上に保持され、sandbox コンテナとともに消失します。トップレベルの Podman コンテナセットアップ自体は、独自の tmpfs マウントを追加しません。
  • ディスク容量の注意点: 注意が必要な主なパスは、 media/, agents/<agentId>/sessions/sessions.json, トランスクリプトの JSONL ファイル, cron/runs/*.jsonl, および /tmp/openclaw/(または設定された logging.file)の下にあるローリングファイルログです。

setup-podman.sh はイメージの tar ファイルをプライベートなテンポラリディレクトリに配置し、セットアップ中に選択されたベースディレクトリを表示します。ルート以外の実行では、そのベースディレクトリが安全に使用できる場合にのみ TMPDIR を受け入れます。そうでない場合は /var/tmp、次に /tmp にフォールバックします。保存された tar ファイルは所有者のみがアクセス可能な状態に保たれ、ターゲットユーザーの podman load にストリームされるため、呼び出し元のプライベートなテンポラリディレクトリがセットアップを妨げることはありません。

  • ログ: Quadlet の場合: sudo journalctl --machine openclaw@ --user -u openclaw.service -f。スクリプトの場合: sudo -u openclaw podman logs -f openclaw
  • 停止: Quadlet の場合: sudo systemctl --machine openclaw@ --user stop openclaw.service。スクリプトの場合: sudo -u openclaw podman stop openclaw
  • 再起動: Quadlet の場合: sudo systemctl --machine openclaw@ --user start openclaw.service。スクリプトの場合: 起動スクリプトを再実行するか podman start openclaw
  • コンテナの削除: sudo -u openclaw podman rm -f openclaw — ホスト上の設定とワークスペースは保持されます
  • 設定または auth-profiles での権限拒否 (EACCES): コンテナはデフォルトで --userns=keep-id を使用し、スクリプトを実行しているホストユーザーと同じ uid/gid で実行されます。ホストの OPENCLAW_CONFIG_DIR と OPENCLAW_WORKSPACE_DIR がそのユーザーによって所有されていることを確認してください。
  • Gateway の起動がブロックされる (gateway.mode=local がない): ~openclaw/.openclaw/openclaw.json が存在し、 gateway.mode="local" が設定されていることを確認してください。 setup-podman.sh は、このファイルがない場合に作成します。
  • openclaw ユーザーで Rootless Podman が失敗する: /etc/subuid と /etc/subgid に openclaw の行(例: openclaw:100000:65536)が含まれているか確認してください。ない場合は追加して再起動してください。
  • コンテナ名が既に使用されている: 起動スクリプトは podman run --replace を使用するため、再起動時に既存のコンテナは置き換えられます。手動でクリーンアップするには podman rm -f openclaw を実行してください。
  • openclaw ユーザーとして実行時にスクリプトが見つからない: setup-podman.sh が実行され、 run-openclaw-podman.sh が openclaw のホーム(例: /home/openclaw/run-openclaw-podman.sh)にコピーされていることを確認してください。
  • Quadlet サービスが見つからない、または起動に失敗する: .container ファイルを編集した後は、 sudo systemctl --machine openclaw@ --user daemon-reload を実行してください。Quadlet には cgroups v2 が必要です。 podman info --format '{{.Host.CgroupsVersion}}' を実行して 2 と表示されるか確認してください。

オプション:自身のユーザーとして実行する

Section titled “オプション:自身のユーザーとして実行する”

専用の openclaw ユーザーを使わず、通常のユーザーとして Gateway を実行する場合:イメージをビルドし、 OPENCLAW_GATEWAY_TOKEN を含む ~/.openclaw/.env を作成し、 --userns=keep-id と ~/.openclaw へのマウントを指定してコンテナを実行します。起動スクリプトは openclaw ユーザーでのフロー向けに設計されています。シングルユーザー設定の場合は、スクリプト内の podman run コマンドを手動で実行し、設定とワークスペースを自身のホームディレクトリに向けることができます。ほとんどのユーザーには、設定とプロセスを分離できる setup-podman.sh を使用して openclaw ユーザーとして実行することをお勧めします。


セットアップで困ったときは、AI Setup Assistant も活用してみてください。

OpenClaw

OpenClaw Expert

まだ解決しませんか?

このページで解決しない場合は、OpenClaw Expertに直接質問してください。