问题描述
因项目需求,在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
这需要根据自己的需求来调整能力而进一步设置权限