У меня есть раздел 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/