PVE 在 LXC 容器中安装 Docker
约 1408 字大约 5 分钟
2026-08-28
在 Proxmox VE 的 LXC 容器中运行 Docker,相比虚拟机更轻量、启动更快,但需要正确配置权限以避免安全隐患。
背景与动机
在 Proxmox VE (PVE) 中部署 Docker 环境有两种主流方案:
- 虚拟机 (VM):完整隔离,但资源占用大,启动慢
- LXC 容器:轻量高效,启动快,但需要额外配置
LXC 容器与宿主机共享内核,意味着 Docker 容器内的进程会直接使用 PVE 宿主机的内核。这带来性能优势,也意味着需要正确配置权限。
本文适合已经安装好 PVE 的用户,目标是在 LXC 容器中运行 Docker 服务。
前置条件
- PVE 已安装并正常运行(版本 7.x 或 8.x)
- 有 SSH 或 Web 控制台访问权限
- 了解基本的 Linux 命令操作
步骤一:下载 LXC 模板
在 PVE Web 管理界面中:
- 点击左侧导航栏的 local (pve) 存储
- 选择 CT 模板 → 模板
- 搜索并下载
ubuntu-22.04-standard或debian-12-standard
推荐使用 Ubuntu 22.04 或 Debian 12,社区支持更好。
也可以通过命令行下载:
# 登录 PVE 宿主机
pveam update
pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst步骤二:创建特权容器
在 PVE Web 界面创建容器:
- 点击右上角 创建 CT
- 填写基本信息:
- 节点:选择当前节点
- CT ID:例如
100(唯一数字) - 主机名:例如
docker-server - 密码:设置 root 密码
- 选择模板:刚才下载的 Ubuntu 模板
- 配置磁盘、CPU、内存(建议至少 2 核 CPU、4GB 内存)
- 关键配置:在 选项 页面勾选 特权容器
特权容器是运行 Docker 的关键。非特权容器会因为权限问题导致 Docker 无法正常工作。
创建完成后,启动容器。
步骤三:配置容器嵌套虚拟化
即使创建了特权容器,还需要开启嵌套虚拟化功能。
在 PVE Web 界面:
- 选择刚创建的容器
- 点击 选项 → 功能
- 勾选 嵌套 (nesting)
- 点击 确定
或通过命令行修改配置文件:
# 编辑容器配置文件(100 是容器 ID)
nano /etc/pve/lxc/100.conf
# 添加或修改以下行
features: nesting=1修改后需要重启容器生效:
pct stop 100
pct start 100步骤四:进入容器安装 Docker
通过 PVE 控制台或 SSH 进入容器:
# 在 PVE 宿主机上进入容器
pct enter 100更新系统并安装 Docker:
# 更新软件包
apt update && apt upgrade -y
# 安装必要的依赖
apt install -y curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动 Docker 并设置开机自启
systemctl start docker
systemctl enable docker如果你使用的是 Debian 模板,将上述命令中的 ubuntu 替换为 debian。
步骤五:验证 Docker 安装
检查 Docker 是否正常运行:
# 查看 Docker 版本
docker --version
# 运行测试容器
docker run --rm hello-world
# 查看 Docker 服务状态
systemctl status docker如果一切正常,你会看到 hello-world 容器的欢迎信息。
步骤六:配置 Docker 镜像加速(可选)
在国内网络环境下,配置镜像加速可显著提升拉取速度。
创建或编辑 Docker 配置文件:
mkdir -p /etc/docker
nano /etc/docker/daemon.json添加镜像加速配置:
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}重启 Docker 生效:
systemctl daemon-reload
systemctl restart docker常见问题
权限错误:permission denied
现象:运行 Docker 命令时报权限错误。
原因:容器未设置为特权容器或未开启嵌套功能。
解决方案:
- 确认容器为特权容器
- 确认
features: nesting=1已配置 - 重启容器
Docker 服务无法启动
现象:systemctl start docker 失败。
原因:可能是 AppArmor 或安全策略限制。
解决方案:
在 PVE 宿主机上编辑容器配置,添加:
# /etc/pve/lxc/100.conf
lxc.apparmor.profile: unconfined重启容器后再次尝试。
网络连接问题
现象:容器内无法访问外网或 Docker Hub。
原因:容器网络配置问题。
解决方案:
确认容器的网络模式正确(通常使用 bridge 模式)。在创建容器时选择正确的网桥。
安全注意事项
在 LXC 容器中运行 Docker 存在安全权衡:
- 特权容器:拥有几乎完整的系统权限,安全隔离较弱
- 嵌套虚拟化:增加了攻击面
建议做法:
- 仅在内网或受信任的环境中使用此方案
- 定期更新 PVE、LXC 容器和 Docker
- 避免在容器内运行不可信的镜像
- 考虑使用防火墙限制容器网络访问
如果需要更强的隔离,建议使用虚拟机运行 Docker。
总结
在 PVE 的 LXC 容器中运行 Docker 的核心配置要点:
- 使用 特权容器
- 开启 嵌套虚拟化 功能
- 按标准流程安装 Docker Engine
- 根据网络环境配置镜像加速
相比虚拟机方案,LXC 容器更轻量、启动更快,适合开发测试和家庭实验室场景。对于生产环境或高安全要求场景,建议评估安全风险后再做选择。
