Под каким пользователем запускается контейнер Postgres?

«Под каким пользователем запускается контейнер Postgres?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Официальный образ postgres на Docker Hub сконфигурирован для запуска от непривилегированного пользователя postgres с UID 999 внутри контейнера.

Практические детали и проблемы:

  1. Запуск и проверка:

    docker run -d --name test-postgres -e POSTGRES_PASSWORD=secret postgres:15
    docker exec test-postgres whoami # postgres
    docker exec test-postgres id # uid=999(postgres) gid=999(postgres) groups=999(postgres),101(ssl-cert)
  2. Проблема с volume и правами: Частая ошибка – монтирование host-директории, владельцем которой является ваш локальный пользователь (UID 1000). Postgres (UID 999) не сможет писать в нее. Решения:

    • Использовать named volume (Docker управляет правами):
      docker volume create pgdata
      docker run -v pgdata:/var/lib/postgresql/data postgres:15
    • Изменить UID при запуске (менее безопасно, может сломать работу):
      docker run -u 1000:1000 -v /host/path:/var/lib/postgresql/data postgres:15
    • Инициализировать volume заранее или использовать entrypoint-скрипт для смены прав.
  3. Безопасность: Запуск от не-root пользователя postgres – это security best practice, ограничивающая ущерб в случае компрометации контейнера. Сам демон Postgres внутри контейнера также запускается от этого пользователя.