我正在尝试在 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