PVE 9.1 新增了对 OCI 格式容器的支持。部分曾经需要使用 Docker 或 Podman 运行的容器,现在可以直接在 Proxmox VE 内原生导入运行。在此记录一下容器的配置过程和注意事项。

TLDR

  • 目前不支持特权容器(下载后无法导入,部分要求特权的容器以非特权导入可能不能正常启动)
  • 可以全图形化操作,但是部分操作使用命令会更方便
  • 使用 Docker 运行容器时,容器内可检测 Running within a container,使用 Proxmox VE 原生运行时未检出,具体机制未探明
  • 使用 vmbr 联网,或自己配置硬件直通,似乎没有办法直接共享宿主机 IP

下载容器模板

找到模板下载页面,将 Docker 命令 docker pull vaultwarden/server:latest 中的 vaultwarden/server:latest 直接粘贴至 Reference 输入框,然后等待容器下载:

Pull OCI in Proxmox VE

模板下载后,可按 LXC 容器导入流程进行导入

容器导入

选择 Web UI 右上角 Create CT,或使用 pct create 命令,然后输入主机名、ID 等基本信息,确认非特权已勾选,选择容器模板,设置存储空间、内存占用限制等参数,创建容器:

Create OCI CT in Proxmox VE

容器使用

创建容器后,可根据自身需求在 Resources 菜单中创建数据盘,隔离容器本体和数据,以 Vaultwardedn 为例,可直接新建 /data 的挂载点;Options > Environment 可设置或修改容器的环境变量

常规 rootfs LXC 模板一般没有预设变量,OCI 模板可自动识别并设置

Proxmox VE CT Envs

若测试没有问题,投入生产使用前请不要忘记设置 Start at boot。

其他技术细节

在常规 LXC 容器运行 next-server,进程树显示为:

1
2
3
4
5
6
7
8
9
10
11
12
├─lxc-start───systemd─┬─PM2 v5.4.3: God─┬─pnpm─┬─sh───next-server (v1───16*[{next-server (v1}]
│ │ │ └─9*[{pnpm}]
│ │ └─10*[{PM2 v5.4.3: God}]
│ ├─3*[agetty]
│ ├─cron
│ ├─dbus-daemon
│ ├─2*[dhclient]
│ ├─master─┬─pickup
│ │ └─qmgr
│ ├─postgres───5*[postgres]
│ ├─sshd
│ └─systemd-*

在常规 LXC 容器运行 Docker,再使用 Docker 运行服务,进程树显示为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
├─lxc-start───systemd─┬─NetworkManager───3*[{NetworkManager}]
│ ├─3*[agetty]
│ ├─blkmapd
│ ├─containerd───11*[{containerd}]
│ ├─containerd-shim─┬─s6-svscan─┬─s6-supervise───s6-linux-init-s
│ │ │ ├─s6-supervise───s6-ipcserverd
│ │ │ ├─s6-supervise
│ │ │ └─s6-supervise───python3─┬─go2rtc───11*[{go2rtc}]
│ │ │ └─27*[{python3}]
│ │ └─12*[{containerd-shim}]
│ ├─cron
│ ├─dbus-daemon
│ ├─dockerd───12*[{dockerd}]
│ ├─master─┬─pickup
│ │ └─qmgr
│ ├─os-agent───4*[{os-agent}]
│ ├─polkitd───3*[{polkitd}]
│ ├─rpcbind
│ ├─sshd
│ └─systemd-*

直接导入 OCI 模板容器,进程树显示为:

1
├─lxc-start───vaultwarden───20*[{vaultwarden}]