Пользователя главного процесса задаёт ключ --user при создании контейнера; docker exec по умолчанию идёт от того же пользователя.
Имя после --user docker ищет в /etc/passwd образа, а в alpine пользователя student нет. Числа работают всегда: --user 1000:1000 — это UID и GID student, только id внутри печатает их без имён.
Число после двоеточия — группа. Без него процесс получает группу 0, а это группа root.
Контейнер запущен с --user 1000 и создал файл в каталоге машины. Кого ls -l покажет владельцем и группой этого файла?
-
Владельца файлу даёт UID процесса, а он 1000 — это student. root остался только в группе.
-
Группу задаёт число после двоеточия в
--user. Без него процесс работает с GID 0, и файл получает группу root.
Без GID после двоеточия процесс работает с группой 0. Файл получает владельца student и группу root, поэтому --user пишут парой: 1000:1000.
Главное в шаге
- UID процесса в контейнере — тот же UID на машине: root внутри — root для подключённых файлов хоста.
-
--user UID:GIDзадаёт пользователя главного процесса;docker execидёт от него же. -
Имя в
--userищется в образе, числа работают всегда; без GID группа процесса — root.