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

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

Ответ

По умолчанию контейнер Docker запускается от пользователя root (UID 0). Это создает риски для безопасности, особенно если контейнеру скомпрометированы и получает доступ к хосту.

Как изменить пользователя:

  1. В Dockerfile: Используйте инструкцию USER.

    FROM alpine:latest
    RUN addgroup -g 1001 -S appgroup && 
        adduser -u 1001 -S appuser -G appgroup
    USER appuser:appgroup
    COPY --chown=appuser:appgroup app /app
    CMD ["/app/start.sh"]
  2. При запуске контейнера: Используйте флаг --user.

    docker run --user 1001:1001 my-image:latest

    Можно указать как UID/GID, так и имя пользователя/группы, если они существуют внутри образа.

Практические рекомендации:

  • Всегда запускайте production-контейнеры от непривилегированного пользователя.
  • Создавайте пользователя и группу на этапе сборки образа (как в примере выше), а не в рантайме.
  • Для доступа к определенным ресурсам (например, порту 80/443) используйте setcap или запускайте контейнер с --cap-add, а не от root.
  • Убедитесь, что файлы, копируемые в образ (COPY), имеют правильные права (используйте --chown).