Я пытаюсь запустить контейнер Docker внутри контейнера LXC. Однако это приводит к появлению следующей ошибки:
[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
Я предполагаю, что мне нужно настроить некоторую конфигурацию, чтобы она была более разрешительной, но поскольку я создал контейнер LXC с помощью virt-manager, я не уверен, с чего начать.
Обратите внимание, что контейнер LXC использует chroot для хранения, что AFAIK должно позволить докеру без проблем использовать полную AUFS, но если я ошибаюсь, поправьте меня.
Как оказалось, LXC по умолчанию не позволяет контейнерам иметь возможность CAP_MKNOD, поскольку теоретически может позволить контейнеру взять на себя управление хостом. Это можно изменить, но это не очень хорошо документировано. Основываясь на запросе на перенос от 2015 года в списке рассылки, я смог собрать фрагмент XML, который это делает. Вам просто нужно отредактировать определение контейнера, которое находится в /etc/libvirt/lxc/[container name]/
<features>
<capabilities policy='allow'>
<mknod state='on'/>
</capabilities>
</features>
Обратите внимание, что файл может уже содержать определение, в этом случае вставьте раздел внутри этого раздела. Возможно, вам придется перезапустить libvirt, прежде чем он вступит в силу с systemctl restart libvirtd.service
(это не приведет к перезапуску существующих контейнеров или виртуальных машин, а только к службе).