2015-03-19 2 views
0

Сводка: группа общего тома изменяется в контейнере докера, в зависимости от того, какой пользователь хост-компьютера работает с контейнером.Docker: группа общих томов изменяется в зависимости от пользователя хоста

В моей хост-машине у меня есть два пользователя: userHost1 и userHost2

Записан как userHost1 я получаю DEBiAN изображение, и я построил Docker изображение со следующим Dockerfile:

FROM debian 

RUN adduser --disabled-password --gecos '' user 

После этого, когда я запускаю докер с userHost1 и загружаю общий том, я могу писать на нем. Но если я загружу его с userHost2, я не могу писать.

Запуск докер в userHost1:

[email protected]:~$ docker run -t -i -u user -v /home/userHost1/try/:/try/ my_debian 
[email protected]:/$ ls -ahl 
... 
drwxrwxr-x 2 user user 4.0K Mar 19 03:41 try 
... 

Но если бы я войти в хозяина как userHost2:

[email protected]:~$ docker run -t -i -u user -v /home/userHost2/try/:/try/ my_debian 
[email protected]:/$ ls -ahl 
... 
drwxrwxr-x 2 1002 1002 4.0K Mar 19 03:45 try 
... 

[email protected]:/$ touch try/hello 
touch: cannot touch `hello': Permission denied 

Почему это происходит? Я думал, что пользователь в хосте не имеет значения для контейнера докеров. Это потому, что я вытащил изображение Debian как userHost1?

Конечно, пользователь userHost1 является владельцем/home/userHost1/try /, а userHost2 является владельцем/home/userHost2/try /.

ответ

1

Это просто проблема с разрешениями. Помните, что uids одинаковы в контейнере и на хосте, но имена пользователей могут быть разными (поэтому uid 1002 может иметь разные имена на хосте и в контейнере).

Владелец /home/userHost1/try/ имеет тот же uid, как пользователь user в контейнере. Владелец /home/userHost2/try/ является uid 1002, который равен не то же, что и user в контейнере, поэтому user не может писать в каталог.

+0

Отлично, спасибо за объяснение. Есть ли стратегия/лучшие практики для решения этой проблемы? – user1294122

+1

Ну, самое легкое решение - убедиться, что вы используете тот же самый uid везде, то есть userHost2 должен иметь uid как userHost1, который вы можете установить с помощью useradd/adduser. В противном случае вы можете предоставить выбранный доступ к gid и добавить всех пользователей в эту группу. –

Смежные вопросы