PVE8 虚拟机下,特权容器LXC无法运行Docker的问题的解决

问题描述

因项目需求,在PVE8环境下创建了无特权LXC容器,模板是Ubuntu 22.04,在可以正常安装Docker但无法运行,运行时报错

Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running `/usr/sbin/apparmor_parser apparmor_parser -Kr /var/lib/docker/tmp/docker-default641263055` failed with output: apparmor_parser: Unable to replace "docker-default".  Permission denied; attempted to load a profile while confined? error: exit status 243.

经查原因是:AppArmor启用了,但 Docker 默认的 AppArmor 配置文件无法加载导致。
搜索网络,看到给出的简单解决方案是配置 /etc/pve/lxc/XXX.conf文件,增加:

lxc.cgroup2.devices.allow: a
lxc.cap.drop:

经测试的确能够正常运行DOCKER。

但是由于

lxc.cgroup2.devices.allow

是基于 Linux 控制组(cgroup v2)的一个配置项,主要用于控制容器对设备的访问权限。在 Linux 系统中,设备以文件的形式存在于 `/dev` 目录下,通过这个配置项,你可以指定容器允许访问哪些设备。显然`a`:是一个特殊的参数,表示允许容器访问所有设备。配置文件中设置 `lxc.cgroup2.devices.allow: a` 时,意味着该 LXC 容器可以访问宿主机上的所有设备文件,包括块设备(如硬盘)、字符设备(如串口)等。

这显然是**不安全**的。因而考虑替换为:

lxc.apparmor.profile: unconfined

经测试可以正常运行DOCKER。

lxc.apparmor.profile: unconfined`:这一配置会让容器不受 AppArmor 配置文件的常规限制,意味着容器可以使用 AppArmor 所管理的全部能力。

下一步就是优化并进一步控制AppArmor的能力,在尽可能安全的情况下运行。

# 基本容器配置 
lxc.include: /usr/share/lxc/config/common.conf lxc.arch: amd64

# 启用 AppArmor 支持 
lxc.apparmor.profile: generated 

# 允许特定的 AppArmor 能力 
lxc.apparmor.allow: netwodrk lxc.apparmor.allow: file

这需要根据自己的需求来调整能力而进一步设置权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值