Назад | Перейти на главную страницу

Docker внутри процесса запуска контейнера LXC вызвал «применить заглавные буквы: операция не разрешена»

Я пытаюсь запустить контейнер 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 (это не приведет к перезапуску существующих контейнеров или виртуальных машин, а только к службе).