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 PCopenvinoAlder Lake-N の iGPU、/dev/renderD128 が利用可能
J4125 / J4105 世代の旧 NUCopenvinoApollo Lake の iGPU、/dev/renderD128 が利用可能
第 11 世代以降の i3-i7 + Iris Xeopenvinoコストパフォーマンスに優れた選択肢
NVIDIA GPU 搭載の PVE ホストcuda または trtPVE ホストに NVIDIA ドライバーをインストールし、LXC に /dev/nvidia* をパススルーする必要があります

2. 事前準備(PVE ホスト側)

  1. 1

    ホストに /dev/dri があることを確認

    PVE シェルで ls -la /dev/dri/ を実行します。card0/card1 と renderD128 があるはずです。なければ PVE カーネルが i915 をロードしていないので、先に modprobe i915 を実行してください

  2. 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. 3

    render/video グループの GID を確認

    PVE シェルで getent group render と getent group video を実行し、GID を控えておきます(既定値は render=104、video=44)。後の pct set で使用します

3. LXC コンテナを作成

bash
# 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 101

privileged + nesting=1 + keyctl=1 が必須

--unprivileged 0 は privileged LXC を意味し、家庭用途では最もシンプルな選択です(unprivileged で docker を動かすには 90 行以上の lxc.conf 調整が必要になります)。nesting=1 によりコンテナ内でさらに docker を実行でき、keyctl=1 により docker の overlayfs が機能します。

4. LXC へ iGPU をパススルー

bash
# 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 を実行

bash
# 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)で実行:

bash
pct enter 101
cd ~/skyview

# 現在のタグ(既定は latest)の最新イメージにアップグレードして再作成
docker compose -p yunkan -f compose.yml up -d --pull always

特定バージョンに固定したい場合は、先に compose 内の image タグを変更してから再作成してください(バリアントを変えないよう注意——下記の警告を参照):

bash
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

アップグレード時にバリアントを間違えないこと

image タグ内のバリアント(openvino / cpu / cuda / trt)は元と同じでなければなりません —— LXC + iGPU パススルー構成では openvino を使っているので、誤って cpu にするとハードウェアアクセラレーションが失われます。分からない場合はまず docker ps で現在のイメージ名に -openvino と -cpu のどちらが含まれているか確認してください。data/ と recordings/ のボリュームはバージョンをまたいで互換性があり、DB マイグレーションは新しいコンテナの起動時に自動実行されるため、アップグレードでデータが失われることはありません。

方法 C:インストールスクリプトの再実行

ワンライナーのインストーラは冪等です。再実行するとイメージの再取得、compose の再生成、コンテナの再作成が行われます。古い環境を最新の標準構成に更新したい場合に最適です(旧版の yunkan-updater 補助コンテナも整理されます):

bash
pct enter 101
curl -fsSL https://cdn.yun-kan.com/yunkan-install.sh | bash

7. バックアップ / 復元

  • 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 set のコマンドが正しいか確認してください(gid の数値はお使いのホストで実際に確認した値にしてください)。次にコンテナを再起動します: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 を一元管理

PVE Web UI → Datacenter → LXC 101 を選択すると、CPU / メモリ / ディスク / ネットワークをグラフで確認できます。ホストに直接ログインして docker stats を実行するより見やすくおすすめです。

このページは役に立ちましたか?