Назад | Перейти на главную страницу

Разница между PGID / PUID и GID / UID при настройке контейнеров докеров

Я новичок в Docker и видел, что некоторые сценарии для запуска контейнерного программного обеспечения требуют указания любого из них для соответствия определенному пользователю и группе. Поэтому мне было интересно, в чем разница между ними? Примеры ниже для иллюстрации.

Jellyfin использует пару UID / GID:

docker run -d \
    --name="Jellyfin" \
    --restart=always \
    --network=host \
    -p 8096:8096 \
    -e UID=1000 \
    -e GID=1000 \
    -v /media:/media \
    -v $HOME/docker/jellyfin/config:/config \
    jellyfin/jellyfin:latest

Пока Caliber-web использует набор PUID / PGID:

docker create --name=calibre-web --restart=always \
    -v ~/books:/books \
    -v /etc/localtime:/etc/localtime:ro \
    -e PGID=1000 -e PUID=1000 \
    -p 8081:8083 \
    technosoft2000/calibre-web

В поисках информации я даже видел несколько случайных репозиториев на github в какой-то момент это изменилось с прежнего на более позднее; в чем разница между обоими вариантами?

Я понял ваш вопрос: «Почему эти переменные называются PUID и PGID, а не UID и GID»? На самом деле их можно было назвать как угодно. Ни Docker, ни Linux это не волнует. Приложение решает, что с ними делать.

Дальнейшие поиски показали, что это просто соглашение, а некоторые приложения делают свое дело. Например, одно приложение использует переменные среды MAYAN_USER_UID и MAYAN_USER_GID соответственно.

Параметр -e устанавливает переменные среды. поиск в Google для environment variable PUID дает среди прочего такой результат:

Понимание PUID и PGID на linuxserver.io, которые предоставляют образ докера для calibre-web.

Цитата с той страницы:

Использование PUID и PGID позволяет нашим контейнерам сопоставлять внутреннего пользователя контейнера с пользователем на хост-машине. Все наши контейнеры используют этот метод сопоставления пользователей и должны применяться соответствующим образом.

Еще одно примечание с этой страницы:

Нам известно, что в последних версиях движка Docker появился флаг --user. Наши образы еще несовместимы с этим, поэтому мы рекомендуем продолжать использовать PUID и PGID.

Итак, необходимо запустить контейнер. Как это будет реализовано, зависит от разработчиков этих образов.