У меня есть раздел btrfs (смонтированный на / srv
) в моей хост-системе с вложенным томом
( старый
) .
Я хочу управлять им из контейнера докеров (я запустил его
с помощью -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.
Мне удалось заставить это работать, добавив CAP_SYS_ADMIN «Возможности Linux» во время выполнения 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 features
Какие из этих возможностей используются Docker по умолчанию, а какие добавление / удаление можно найти здесь, в разделе «Права выполнения и возможности Linux»:
https://docs.docker.com/engine/reference/run/