Как Docker-контейнер может записывать в смонтированный каталог с разрешениями, предоставляемыми через членство в группах? - PullRequest
0 голосов
/ 08 октября 2018

Версии

  • ОС хоста: Debian 4.9.110
  • Версия Docker: 18.06.1-ce

Сценарий

У меня есть каталог, в котором несколько пользователей (user-a и user-b) имеют доступ на чтение / запись через общее членство в группе (shared), настроенное с помощью chown:

/media/disk-a/shared/$ ls -la
drwxrwsr-x 4 user-a shared 4096 Oct  7 22:21 .
drwxrwxr-x 7 root   root   4096 Oct  1 19:58 ..
drwxrwsr-x 5 user-a shared 4096 Oct  7 22:10 folder-a
drwxrwsr-x 3 user-a shared 4096 Nov 10 22:10 folder-b

UIDs &GID следующие:

uid=1000(user-a) gid=1000(user-a) groups=1000(user-a),1003(shared)
uid=1002(user-b) gid=1002(user-b) groups=1002(user-b),1003(shared)

Релевантный /etc/group выглядит следующим образом:

shared:x:1003:user-a,user-b

Когда su входит в обоих пользователей, файлы могут создаваться, как и ожидалось, в общем каталоге.

Общий каталог подключен к контейнеру Docker через mount, привязанный к /shared/.Контейнер Docker запускается как user-b (с использованием параметра --user "1002:1002")

$ ps aux | grep user-b
user-b     1347  0.2  1.2 1579548 45740 ?       Ssl  17:47   0:02 entrypoint.sh

id изнутри контейнера печатает следующий, на мой взгляд, неплохой результат:

I have no name!@7a5d2cc27491:/$ id
uid=1002 gid=1002

Кроме того, ls -la идеально отражает ее хост-систему:

I have no name!@7a5d2cc27491:/shared ls -la
total 16
drwxrwsr-x 4 1000 1003 4096 Oct  7 20:21 .
drwxr-xr-x 1 root root 4096 Oct  8 07:58 ..
drwxrwsr-x 5 1000 1003 4096 Oct  7 20:10 folder-a
drwxrwsr-x 3 1000 1003 4096 Nov 10 20:10 folder-b

Проблема

Внутри контейнера я ничего не могу записать в общий каталог.Для touch test я получаю следующее, то есть:

I have no name!@7a5d2cc27491:/shared$ touch test
touch: cannot touch 'test': Permission denied

Я могу записать в каталог, который напрямую принадлежит user-b (пользователь и группа) и подключен к контейнеру... Просто членство в группе кажется каким-то образом вообще не уважаемым.

Я рассматривал такие вещи, как переназначение пространства имен пользователя и другие вещи, но, похоже, это решения для чего-то, что здесь не применяется,Что мне не хватает?

1 Ответ

0 голосов
/ 09 октября 2018

Ваш пользователь контейнера имеет gid=1002, но не является членом группы shared с gid=1003.

В дополнение к --user "1002:1002" вам нужно --group-add 1003.Если пользователю контейнера разрешен доступ к общей папке с помощью gid=1003.

id, должно отображаться:

I have no name!@7a5d2cc27491:/$ id
uid=1002 gid=1002 groups=1003
...