Docker 在 LXC 内启动容器进程导致“应用 caps:操作不允许”

Docker 在 LXC 内启动容器进程导致“应用 caps:操作不允许”

我正在尝试在 LXC 容器内运行 Docker 容器。但是这样做会导致我收到以下错误: [root@DH-DockerLXC01 alex]# docker run fedora bash docker: Error response from daemon: OCI runtime create failed: container_linux.go:337: starting container process caused "apply caps: operation not permitted": unknown. ERRO[0001] error waiting for container: context canceled 我推测我需要设置一些配置以使其更加宽松,但由于我已经使用 virt-manager 创建了 LXC 容器,所以我不确定从哪里开始。

请注意,LXC 容器使用 chroot 进行存储,据我所知,这应该允许 docker 使用完整的 AUFS 而不会出现任何问题,但如果我错了,请纠正我。

答案1

对于由 Proxmox 管理的特权 LXC,此解决方案有助于:

lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:

注意安全!来源:在 Proxmox 上运行 Docker

答案2

事实证明,默认情况下,LXC 不允许容器具有 CAP_MKNOD 功能,因为理论上它可以允许容器接管主机。这可以被覆盖,但文档并不完善。根据 2015 年邮件列表中的拉取请求,我能够拼凑出一些 XML 来实现这一点。您只需编辑容器定义,它位于/etc/libvirt/lxc/[container name]/

<features>
  <capabilities policy='allow'>
    <mknod state='on'/>
  </capabilities>
</features>

请注意,该文件可能已经包含定义,在这种情况下,请将该部分粘贴到该部分内。您可能需要重新启动 libvirt 才能使其生效systemctl restart libvirtd.service(这不会重新启动现有容器或虚拟机,只会重新启动服务)。

答案3

江丰一

  • 总结:检查 BIOS 中的“虚拟化”设置

在我的 Proxmox 机器上,升级 RAM 后,发现发生此错误是因为 BIOS 中的“虚拟化”设置由于某种原因被“禁用”。

我将其设置为“启用”,然后重新开始工作。呵。

  • 操作系统:Proxmox VE 7.4-4(Debian GNU/Linux 11,靶心)
  • 主板:GA-880GM-USB3 Rev. 1.1

相关内容