Как запустить как root внутри контейнера busybox? - PullRequest
0 голосов
/ 01 августа 2020

У меня есть контейнер Busybox, работающий в Docker на виртуальной машине Ubuntu. Я хотел увеличить shmem этого контейнера, поэтому запустил команду mount -o remount,size=128m /dev/shm внутри контейнера. Не удалось выполнить команду из-за ошибок разрешений. Пользователь отображается как root, но команда не выполняется.

~$ docker run -it busybox sh
/ # df -h /dev/shm
Filesystem                Size      Used Available Use% Mounted on
shm                      64.0M         0     64.0M   0% /dev/shm
/ # mount -o remount,size=128m /dev/shm
mount: permission denied (are you root?)
/ # whoami
root

Затем я запускал сам контейнер как root, но это тоже не имело никакого значения.

$ docker run -u root -it busybox sh
/ # whoami
root
/ # df -h /dev/shm
Filesystem                Size      Used Available Use% Mounted on
shm                      64.0M         0     64.0M   0% /dev/shm
/ # mount -o remount,size=256m /dev/shm
mount: permission denied (are you root?)
/ # su -c "mount -o remount,size=256m /dev/shm"
mount: permission denied (are you root?)
/ #

Затем я запустил контейнер с опцией --privileged. Только после этого я смог запустить перемонтировать shmem внутри контейнера. несмотря на то, что юзер root? Это потому, что у контейнера не было привилегированного доступа?

Как узнать, какие операции требуют привилегированного доступа, а какие нет? Есть ли способ перемонтировать shmem внутри контейнер без запуска в привилегированном режиме?

1 Ответ

1 голос
/ 01 августа 2020

Есть вариант docker run --shm-size. Укажите это при запуске контейнера.

Обычно контейнеры работают с ограниченным набором возможностей системного уровня, даже если они работают как root. Они также перечислены в docker run документации . Здесь конкретно не упоминается установка, но в расширенных возможностях (7) man упоминается, что CAP_SYS_ADMIN контролирует доступ к mount (2) (среди широкий спектр других вещей).

Вкратце: контейнеры не могут монтировать (8) или umount (8) файловые системы без особых привилегий, и вы следует постараться избежать этого. Это включает в себя некоторые относительно безобидные вещи, которые вы можете себе представить, например, ваш пример изменения размера /dev/shm или обратного монтирования образа ISO.

Если вам действительно нужно это сделать, docker run --cap-add SYS_ADMIN - это минимальное разрешение, которое вы необходимо сделать это, но это открывает довольно широкий набор возможных операций на хосте. (--privileged подразумевает --cap-add ALL, поэтому он также будет работать здесь, но дает вам еще больший контроль над хост-системой.)

...