OpenClawをPodmanで構築:ルートレスで安全に実行する方法
コンテナを動かすとき、セキュリティや権限の管理で悩むことはありませんか?特にルート権限を使わずに安全に運用したい場合、設定が少し複雑に感じられるかもしれません。
OpenClaw Gateway を rootless な Podman コンテナで動かすことで、セキュリティを確保しながらスムーズに環境を構築できます。Docker と同じイメージ(リポジトリの Dockerfile からビルド)を使用するため、移行も簡単です。
- Podman (rootless)
- 初回セットアップ用の Sudo 権限(ユーザー作成、イメージ作成のため)
クイックスタート
Section titled “クイックスタート”1. 初回セットアップ(リポジトリのルートで実行。ユーザー作成、イメージビルド、起動スクリプトのインストールを行います):
./setup-podman.shこれにより、最小限の ~openclaw/.openclaw/openclaw.json も作成され(gateway.mode="local" に設定)、ウィザードを実行しなくても Gateway を開始できるようになります。
デフォルトでは、コンテナは Systemd サービスとしてインストールされません。手動で起動する必要があります(下記参照)。自動起動や再起動が必要な本番環境のようなセットアップには、代わりに Systemd Quadlet ユーザーサービスとしてインストールしてください。
./setup-podman.sh --quadlet(または OPENCLAW_PODMAN_QUADLET=1 を設定します。コンテナと起動スクリプトのみをインストールする場合は --container を使用してください。)
ビルド時に使用できるオプションの環境変数(setup-podman.sh を実行する前に設定):
OPENCLAW_DOCKER_APT_PACKAGES— イメージビルド中に追加の apt パッケージをインストールしますOPENCLAW_EXTENSIONS— 拡張機能の依存関係を事前インストールします(スペース区切りの拡張機能名、例:diagnostics-otel matrix)
2. Gateway の起動(手動、クイックテスト用):
./scripts/run-openclaw-podman.sh launch3. オンボーディングウィザード(チャネルやプロバイダーを追加する場合など):
./scripts/run-openclaw-podman.sh launch setupその後、 http://127.0.0.1:18789/ を開き、 ~openclaw/.openclaw/.env にあるトークン(またはセットアップ時に表示された値)を使用してください。
Systemd (Quadlet, オプション)
Section titled “Systemd (Quadlet, オプション)”./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.shsudo -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を使用してください。
環境変数と設定
Section titled “環境変数と設定”- トークン:
~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を使用します。
ストレージモデル
Section titled “ストレージモデル”- 永続的なホストデータ:
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 にストリームされるため、呼び出し元のプライベートなテンポラリディレクトリがセットアップを妨げることはありません。
便利なコマンド
Section titled “便利なコマンド”- ログ: 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— ホスト上の設定とワークスペースは保持されます
トラブルシューティング
Section titled “トラブルシューティング”- 設定または 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 も活用してみてください。
次のステップ
Section titled “次のステップ”OpenClaw Expert
まだ解決しませんか?
このページで解決しない場合は、OpenClaw Expertに直接質問してください。