跳转到内容

用 OCI 镜像创建容器 ​

以前建 LXC 容器只能用 PVE 官方模板仓库或者自己打包的系统模板。PVE 9.1 起可以直接从 Docker Hub 这类 OCI 镜像注册表拉一个镜像,转换成容器。

应用容器目前是技术预览

用 OCI 镜像建出完整系统容器(带 init 系统的那种)是稳定功能。但用 OCI 镜像建出应用容器(只跑单个进程、没有自己的 init,行为更接近一个 Docker 容器)目前处于技术预览阶段,官方文档明确这样标注。技术预览意味着行为细节还可能随小版本调整,生产环境要用之前先在测试环境验证清楚。

为什么需要它 ​

很多常见服务已经打包成了 OCI/Docker 镜像并发布在公开或私有的注册表里。以前要在 PVE 里用它们,得先建一个系统容器再手动装 Docker、拉镜像、跑起来(见在 LXC 里跑 Docker),多了一层。OCI 支持让你可以跳过这一步,直接把镜像转换成一个 LXC 容器——它依然是一个普通的 LXC 容器,能在 Web UI 管理、能设资源限制、能打快照和备份、能挂 PVE 防火墙,只是根文件系统的来源变成了 OCI 镜像。

开始之前 ​

  • PVE 9.1 或以上版本。
  • 理解容器还是虚拟机和创建第一个容器里讲的基础概念——OCI 容器最终还是走 LXC 这一套框架,不是单独的运行时。
  • 明确这不是 Docker 的替代品:当前技术预览版本会把镜像的所有分层压平成一个根文件系统,没有增量更新机制,升级镜像版本需要重建容器,不能像 docker pull 那样原地更新。

操作步骤 ​

第一步:获取 OCI 镜像 ​

Web UI 里,找一个开启了 Container template 内容类型的存储,进入它的 CT Templates 视图,点 Pull from OCI registry:

字段说明
Registry / Reference例如 registry.hub.docker.com/library/caddy,指定注册表和镜像名
Tag点 Query 后会列出可用标签(如 latest、具体版本号),选一个

点 Download,PVE 会拉取镜像、转换格式,存成这个存储上的一个模板文件。

私有注册表和来源审查同样适用

创建第一个容器里提到过官方模板要用可信来源。OCI 镜像同理——只从你信任的注册表和镜像名拉取,镜像里同样可以塞任何东西,尤其是来路不明的第三方镜像。

第二步:用这个模板创建容器 ​

下载完成后,它会出现在 Create CT 向导的模板列表里,走向导流程和普通模板完全一样(参考创建第一个容器),或者用命令行:

sh
# 在宿主机 shell 执行,<storage> 换成保存模板的存储 ID
pct create <ctid> <storage>:vztmpl/<下载得到的模板文件名>

第三步(仅应用容器):网络托管选项 ​

应用容器通常没有自己完整的网络管理组件。这种情况下可以用 host-managed 网络选项,让宿主机侧直接管理这块网卡的 IP,容器内部不需要跑自己的 DHCP 客户端或网络管理器:

sh
# 在宿主机 shell 执行
pct set <ctid> -net0 name=eth0,bridge=vmbr0,ip=dhcp,host-managed=1

检查结果 ​

  1. pct list 里容器状态是 running。
  2. pct config <ctid> 能看到这个容器的配置,和普通模板建出来的容器格式一致(rootfs、net0 等字段照常存在)。
  3. 进容器确认预期的服务确实在跑:
sh
# 在宿主机 shell 执行
pct exec <ctid> -- ps aux
  1. 应用容器额外确认网络:容器能不能被访问到,host-managed 模式下 IP 是否符合预期。

常见问题 ​

镜像出了新版本,怎么升级? 当前技术预览版本做不到"原地更新"。做法是重新拉取新标签的镜像生成新模板,创建一个新容器替换旧的,数据部分要提前规划成挂载点(见挂载点与 bind mount)而不是留在容器根文件系统里,这样重建容器时数据不会丢。

我想跑好几个互相配合的服务,像 docker-compose 那样。 OCI 容器目前不是编排工具,一个容器对应一个镜像。需要多容器协作的场景,要么给每个服务单独建一个 OCI 容器再自己处理网络互通,要么回到更成熟的路径——用在 LXC 里跑 Docker或者一台跑 Docker 的虚拟机。

需要最大隔离或者要在线迁移这个负载。 LXC 容器本身就不支持在线迁移。这类需求应该把应用跑在虚拟机里,见容器还是虚拟机。

pveam 相关命令找不到 OCI 镜像。 pveam 是面向传统系统模板仓库的工具,OCI 镜像走的是独立的 "Pull from OCI registry" 入口,两者是不同的获取路径。

参考资料 ​

延伸阅读 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。