Proxmox VE LXC デプロイ(iGPU パススルー)
推奨構成:PVE ホスト → privileged LXC コンテナ → コンテナ内 docker → SkyView イメージ。PVE ホストに直接 docker をインストールしないでください(Proxmox 公式でも非推奨とされており、PVE の iptables / apt と衝突します)。LXC は namespace による隔離で性能低下はほぼゼロ、/dev/dri のパススルー体験もホストで直接 docker を動かす場合とほとんど変わりません。
1. 対応ハードウェアと推奨バリアント
| ハードウェア | 推奨バリアント | iGPU の状態 |
|---|---|---|
| N100 / N305 / N355 mini PC | openvino | Alder Lake-N の iGPU、/dev/renderD128 が利用可能 |
| J4125 / J4105 世代の旧 NUC | openvino | Apollo Lake の iGPU、/dev/renderD128 が利用可能 |
| 第 11 世代以降の i3-i7 + Iris Xe | openvino | コストパフォーマンスに優れた選択肢 |
| NVIDIA GPU 搭載の PVE ホスト | cuda または trt | PVE ホストに NVIDIA ドライバーをインストールし、LXC に /dev/nvidia* をパススルーする必要があります |
2. 事前準備(PVE ホスト側)
- 1
ホストに /dev/dri があることを確認
PVE シェルで
ls -la /dev/dri/を実行します。card0/card1 と renderD128 があるはずです。なければ PVE カーネルが i915 をロードしていないので、先にmodprobe i915を実行してください - 2
Debian 12 テンプレートをダウンロード
PVE Web UI → local → CT Templates → Templates ボタン → debian-12-standard を探してダウンロードします(または
pveam download local debian-12-standard_12.x_amd64.tar.zst) - 3
render/video グループの GID を確認
PVE シェルで
getent group renderとgetent group videoを実行し、GID を控えておきます(既定値は render=104、video=44)。後の pct set で使用します
3. LXC コンテナを作成
# PVE ホストシェルで:vmid=101 のコンテナを作成(4 コア、4G メモリ、40G ディスク)
pct create 101 local:vztmpl/debian-12-standard_12.12-1_amd64.tar.zst \
--hostname yunkan \
--cores 4 --memory 4096 --swap 1024 \
--rootfs local-lvm:40 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp,firewall=0 \
--unprivileged 0 \
--features nesting=1,keyctl=1 \
--onboot 1
pct start 101privileged + nesting=1 + keyctl=1 が必須
--unprivileged 0 は privileged LXC を意味し、家庭用途では最もシンプルな選択です(unprivileged で docker を動かすには 90 行以上の lxc.conf 調整が必要になります)。nesting=1 によりコンテナ内でさらに docker を実行でき、keyctl=1 により docker の overlayfs が機能します。4. LXC へ iGPU をパススルー
# PVE ホストで:renderD128 と card1 を vmid=101 にパススルー
pct set 101 -dev0 /dev/dri/renderD128,gid=104 # render グループ
pct set 101 -dev1 /dev/dri/card1,gid=44 # video グループ
# コンテナを再起動して dev のパススルーを反映
pct reboot 101
# 確認:コンテナに入り /dev/dri が存在するか確認
pct exec 101 -- ls -la /dev/dri/5. LXC 内に docker をインストールして SkyView を実行
# LXC に入る
pct enter 101
# docker をインストール
curl -fsSL https://get.docker.com | sh
# SkyView のワンライナースクリプトを実行(/dev/dri が検出されるため openvino バリアントが自動選択されます)
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh | bashスクリプトが完了すると LXC の IP + ポートが表示されます(例:http://10.0.0.148:23406/)。同じネットワークセグメント内のどの端末からでもブラウザでアクセスし、セットアップウィザードに進めます。
6. アップグレード
更新は LXC 内で行います(pct enter 101 でコンテナに入る)。通常の Linux ホストとまったく同じで、LXC 特有の手順はありません。まずは方式 A(ウェブコンソールのワンクリック更新、コマンドライン不要)を推奨。特定バージョンに固定したい/コマンドラインを好む場合は方式 B / C を使ってください。
方法 A:Web 画面からのワンクリックアップグレード(推奨)
Web Admin → 設定 → システム更新 を開いて「アップグレード」をクリックするだけ。システムが自動的に新イメージを取得しメインコンテナを再作成します(切替の瞬間だけ一時的な実行コンテナが現れ、完了後に自動で消えます)。新バージョンが起動しない場合は前のバージョンへ自動ロールバック——コマンドラインは一切不要です。LXC 内でも docker socket は正常に動くため、この経路は完全にサポートされます。
方法 B:コマンドラインでアップグレード
更新のタイミングを自分で管理したい、または特定バージョンに固定したいときに使います。LXC に入り、デプロイディレクトリ(既定 ~/skyview)で実行:
pct enter 101
cd ~/skyview
# 現在のタグ(既定は latest)の最新イメージにアップグレードして再作成
docker compose -p yunkan -f compose.yml up -d --pull always特定バージョンに固定したい場合は、先に compose 内の image タグを変更してから再作成してください(バリアントを変えないよう注意——下記の警告を参照):
cd ~/skyview
# 0.9.9 を目的のバージョン番号に置き換えてください
sed -i 's|image: .*/yunkan-.*|image: registry.cn-hangzhou.aliyuncs.com/yunkan/yunkan-openvino:0.9.9|' compose.yml
docker compose -p yunkan -f compose.yml up -d --pull always --force-recreateアップグレード時にバリアントを間違えないこと
openvino / cpu / cuda / trt)は元と同じでなければなりません —— LXC + iGPU パススルー構成では openvino を使っているので、誤って cpu にするとハードウェアアクセラレーションが失われます。分からない場合はまず docker ps で現在のイメージ名に -openvino と -cpu のどちらが含まれているか確認してください。data/ と recordings/ のボリュームはバージョンをまたいで互換性があり、DB マイグレーションは新しいコンテナの起動時に自動実行されるため、アップグレードでデータが失われることはありません。方法 C:インストールスクリプトの再実行
ワンライナーのインストーラは冪等です。再実行するとイメージの再取得、compose の再生成、コンテナの再作成が行われます。古い環境を最新の標準構成に更新したい場合に最適です(旧版の yunkan-updater 補助コンテナも整理されます):
pct enter 101
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh | bash7. バックアップ / 復元
- LXC スナップショット:アップグレード前に
pct snapshot 101 pre-upgrade-$(date +%Y%m%d)を実行しておけば、問題が起きたときにpct rollback 101 <スナップショット名>でコンテナ全体を即座にロールバックできます - LXC バックアップ:
vzdump 101 --storage localで PVE 標準のバックアップとしてコンテナ全体(docker のボリュームを含む)を保存できます。または Web UI → 101 を選択 → Backup でも可能です - 復元:
pct restore <新しい vmid> <バックアップファイル>でバックアップから復元します - destroy してから create で再構築しないこと:LXC を再構築すると
/etc/machine-idが変わり、ライセンスのフィンガープリントがずれて新しいスロットを消費し続けるループに陥ります。リセットしたい場合は必ずバックアップからpct restoreで復元してください。新しいコンテナを作成しないでください
8. よくある質問
/dev/dri が LXC 内に現れない
pct reboot 101。それでも解決しない場合は pct config 101 | grep dev で設定が書き込まれているか確認してください。docker run が keyctl エラーを出す
--features keyctl=1 を付け忘れています。pct set 101 --features nesting=1,keyctl=1 を実行してから pct reboot 101 で反映してください。すべての LXC を一元管理
このページは役に立ちましたか?