はじめに
NanoClaw v2 のエージェントコンテナは additionalMounts という仕組みで、ホスト側の任意のディレクトリをコンテナ内にマウントできます。ただし設定方法にいくつかの落とし穴があります。この記事では実際に動作した手順を正確にまとめます。
環境
- NanoClaw v2(GitHubクローン、
~/nanoclaw-v2/) - Ubuntu 22.04、systemd ユーザーサービスで起動
仕組みを理解する
マウント処理には3つの要素が絡み合います:
| 要素 | 役割 |
|---|---|
~/.config/nanoclaw/mount-allowlist.json |
マウントを許可するホストパスのセキュリティ設定 |
v2.db の container_configs.additional_mounts
|
実際にマウントする設定(正しいデータソース) |
groups/<folder>/container.json |
DBから毎回生成されるファイル(直接編集しても無効) |
重要な落とし穴:
container.jsonはコンテナ起動のたびにDBからmaterializeContainerJson()で上書き生成されます。このファイルを直接編集しても次の起動時に元に戻ります。設定は必ず DB を更新する必要があります。
手順
ステップ 1: マウント先ディレクトリをホストに作成
sudo mkdir -p /var/data
sudo chown $USER:$USER /var/data
ステップ 2: マウント許可リスト(allowlist)を作成
mkdir -p ~/.config/nanoclaw
cat > ~/.config/nanoclaw/mount-allowlist.json << 'EOF'
{
"allowedRoots": [
{
"path": "/var/data",
"allowReadWrite": true,
"description": "Shared data directory"
}
],
"blockedPatterns": []
}
EOF
allowedRoots にはマウントしたいパスの親ディレクトリ以上のパスを指定します。allowReadWrite: true で読み書き可能になります。
なぜ必要か: このファイルは NanoClaw のセキュリティ機構です。ここに登録されていないパスはすべてマウントが拒否されます。ファイルが存在しない場合、
additionalMountsは全件ブロックされます。
ステップ 3: DB に additionalMounts を設定
ここが最重要ステップです。container.json を直接編集せず、DBを更新します。
# エージェントグループIDを確認(例)
sqlite3 ~/nanoclaw-v2/data/v2.db \
"SELECT id, name FROM agent_groups;"
# additional_mounts を更新
sqlite3 ~/nanoclaw-v2/data/v2.db \
"UPDATE container_configs
SET additional_mounts = '[{\"hostPath\":\"/var/data\",\"containerPath\":\"data\",\"readonly\":false}]'
WHERE agent_group_id = 'YOUR_AGENT_GROUP_ID';"
# 確認
sqlite3 ~/nanoclaw-v2/data/v2.db \
"SELECT additional_mounts FROM container_configs WHERE agent_group_id = 'YOUR_AGENT_GROUP_ID';"
additional_mounts のフォーマット:
[
{
"hostPath": "/var/data",
"containerPath": "data",
"readonly": false
}
]
containerPath は相対パスで指定します。 コンテナ内では自動的に
/workspace/extra/<containerPath>にマウントされます。例えば"containerPath": "data"→ コンテナ内の/workspace/extra/dataになります。
ステップ 4: コンテナを再起動
現在動いているコンテナを停止します。次のメッセージ送信で新しい設定が適用されたコンテナが起動します。
# 現在のコンテナ名を確認
docker ps | grep nanoclaw
# コンテナを停止
docker stop nanoclaw-v2-<group-folder>-<timestamp>
ステップ 5: 動作確認
コンテナ内(エージェントに依頼)からアクセスできるか確認します。
# コンテナ内で実行(エージェントが実行)
ls /workspace/extra/data
echo "Hello from container!" > /workspace/extra/data/test.txt
ホスト側で確認:
cat /var/data/test.txt
# Hello from container!
セキュリティの考慮
allowlist には以下のパターンがデフォルトでブロックされています(~/.ssh、.aws、.env などの認証情報パス)。blockedPatterns で追加のブロックも設定可能です。
まとめ
| 設定場所 | 内容 |
|---|---|
~/.config/nanoclaw/mount-allowlist.json |
許可するホストパスのセキュリティ設定 |
v2.db の container_configs.additional_mounts
|
マウント設定(これが正規のデータソース) |
コンテナ内からは /workspace/extra/<name> でアクセスできます。container.json を直接編集しても DBで上書きされるため、必ず SQLite で DB を更新してください。