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

Невозможно удалить подобъем btrfs внутри Docker

У меня есть раздел btrfs (установлен на /srv) в моей хост-системе с подобомом (old). Я хотел бы управлять им из контейнера докеров (я запустил его с -v /srv:/srv).

Хотя я вполне могу создать его снимок, я не могу перечислить другие подобтомы и / или удалить их:

user@host:~$ docker exec -ti jenkins-slave bash
root@a5496f6bd14b:~# btrfs subvolume snapshot /srv/old /srv/new
Create a snapshot of '/srv/old' in '/srv/new'
root@a5496f6bd14b:~# ls /srv
new old
root@a5496f6bd14b:~# btrfs subvolume delete /srv/new
Delete subvolume (no-commit): '/srv/new'
ERROR: cannot delete '/srv/new': Operation not permitted
root@a5496f6bd14b:~# btrfs subvolume list /srv/new
ERROR: can't perform the search - Operation not permitted
root@a5496f6bd14b:~# ls /srv
new old

Пока я еще могу это сделать из хост-системы.

Похоже, такое поведение связано с настройкой конфигурации Docker.

Я смог заставить это работать, добавив «Возможности Linux» CAP_SYS_ADMIN во время выполнения Docker.

docker run -d -t --cap-add SYS_ADMIN -v /mnt.btrfs:/mnt.btrfs debbtrfs

CAP_SYS_ADMIN
Выполните ряд операций системного администрирования, включая quotactl (2), mount (2), umount (2), swapon (2), swapoff (2), sethostname (2) и setdomainname (2).

Существует целый ряд других «возможностей Linux», включая подробное описание CAP_SYS_ADMIN, которое можно найти на страницах руководства:

$ man 7 capabilities

Какие из этих возможностей являются настройками Docker по умолчанию, а какие можно добавить / удалить, можно найти здесь, в разделе «Права выполнения и возможности Linux»:
https://docs.docker.com/engine/reference/run/