У меня есть докер-контейнер с -v/home/dan:/home/dan: rw. Когда контейнер пишет файлы в /home/dan, файлы принадлежат root в файловой системе хоста. Есть ли способ сделать так, чтобы файлы, записанные из контейнера, на смонтированный том принадлежали произвольному пользователю в файловой системе хоста?
В docker, записывая файл в смонтированную файловую систему как не-root?
Ответ 1
EDIT: это изменилось с момента моего первоначального ответа, в котором говорилось, что это невозможно. В ответ на Mandark:
Это можно сделать, используя переключатель -u для команды docker run.
Например:
docker run -v /home/dan:/home/dan -u `id -u $USER` IMAGE
Ответ 2
Как отметил Франсуа Занинотто, можно использовать идентификатор пользователя.
Это можно сделать, используя переключатель -u для команды docker run.
Например:
docker run -v /home/dan:/home/dan -u `id -u $USER` IMAGE
Ответ 3
A следует за mandark answer - я бы сказал, что также полезно включать группу пользователей, иначе вы получите материал, принадлежащий user: USER
и group: root
. Для достижения user:user
просто введите идентификатор группы, например:
docker run -v /home/dan:/home/dan -u `id -u $USER`:`id -g $USER` IMAGE
# if it for the current user, then you can omit the $USER env var
docker run -v /home/dan:/home/dan -u `id -u`:`id -g` IMAGE
Ответ 4
Это возможно. Трудно автоматизировать, но это возможно. Вот процесс:
- в хосте, определите текущий идентификатор пользователя и идентификатор группы
-
в контейнере докера, запустите оболочку script, чтобы:
- добавить новую группу с идентификатором группы из хоста
- добавить нового пользователя с тем же идентификатором пользователя с хоста (и принадлежащим только что созданной группе)
- sudo как этот новый пользователь
Теперь каждый файл, созданный внутри контейнера, будет использовать правильный идентификатор пользователя и идентификатор группы, а хост будет прикреплять их к вашему пользователю.
Я написал инструмент для автоматизации использования make, который называется make-docker-command. Надеюсь, это поможет.