LINUX.ORG.RU
решено ФорумAdmin

docker перенос юзера

 


0

1

допустим есть каталог с правами user:user на хост машине
я указываю этот каталог в volumes в контейнер
в итоге в контейнере вместо user:user выводит 1000:1000 ну или другой ид
как правильно разрулить? в примерах нигде это не пишут
как я понимаю в контейнере мы работаем под админом, а как быть если используется апач www-data?

В Dockerfile-е создаёшь пользователя внутри docker image с нужными uid:gid (1000:1000 в твоём случае, или можно определять uid:gid текущего пользователя). В конце Dockerfile-а делаешь USER $твой_юзер, или запускаешь программу через какой-нибудь gosu/sudo.

pod ★★
()
Ответ на: комментарий от pod

а если готовая сборка докер?
например файл docker-compose.yml и указан image из реестра
получается нужно делать свой dockerfile и в нем заводить юзера?

kommersant ★★
() автор топика
Ответ на: комментарий от kommersant

Возьми докерфайл того имейджа и просто добавь перед CMD или ENTRYPOINT своего юзера с нужными uid/gid и USER как выше написали.
Тебе не придется пересобирать весь имейдж, докер просто добавит нужные слои к существующему.

stormblastt ★★★
()
Ответ на: комментарий от stormblastt

Точнее тебе нужно его пересобрать, но это займет всего пару секунд при добавлении слоев.

stormblastt ★★★
()
Ответ на: комментарий от stormblastt

или проще в FROM указать уже готовый имейдж (который в докерфайле) и дописать туда RUN useradd/adduser + USER, точно так же будут добавлены 2 небольших слоя поверх уже готового имейджа. Конечно, придётся рядом положить свой docker-compose.yml, где у тебя будет указан уже твой имейдж.

pod ★★
()
Ответ на: комментарий от pod

а как же автоматизация развертывания?
получается на любой докер файл надо прописывать своего юзера?

kommersant ★★
() автор топика
Ответ на: комментарий от kommersant

если надо привязывать пользователя к определённому uid:gid, то конечно. Можно сделать локальный registry и хранить там доработанные образы. В образах с официального docker registry почти всегда всё работает из-под рута, и никто с правами доступа к volume особо не заморачивается.

pod ★★
()

А я тут подумал (но так не делал), сейчас же можно просто отдельно создать docker named volume, настроить в нём все права доступа и подключать уже его к другому контейнеру. Можно с этим поиграться.

pod ★★
()

в итоге в контейнере вместо user:user выводит 1000:1000 ну или другой ид

А зачем вам user:user ? Пусть и будет 1000:1000, т.е. без соответствующего пользователя/группы в /etc/passwd,group.
Docker умеет запускать программы и с указанием числовых uid:gid, указываете в docker-compose.yml для сервиса

user: '1000:1000'
и всё.
Либо попробовать в конфигах самого сервиса указать числовые uid:gid, некоторые сервисы это позволяют.

Если и так не поможет, то можно попробовать перекрыть passwd/group в контейнере:
volumes:
  - /etc/passwd:/etc/passwd:ro
  - /etc/group:/etc/group:ro
Такой способ не работает, если docker-у указано сразу запускать ПО из-под какого-то пользователя, но если переключение выполняет само это ПО уже будучи запущенным под root-ом внутри контейнера, то всё должно сработать (на этом этапе passwd и group будут перекрыты аналогами из родительской системы).
Файлы passwd и group естественно можно создать отдельные с минимально необходимым набором пользователей/групп.

spirit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.