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

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

Ответ

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

Безопасность и лучшие практики: Запуск от root внутри контейнера создаёт риски, особенно если контейнер скомпрометирован и происходит escape в хостовую систему. Стандартной практикой является запуск от непривилегированного пользователя.

Способы задания пользователя:

  1. В Dockerfile (рекомендуется): Создать пользователя и переключиться на него.
    FROM alpine:latest
    RUN addgroup -S appgroup && adduser -S appuser -G appgroup
    # Копируем и настраиваем приложение от root
    COPY --chown=appuser:appgroup app /app
    USER appuser
    CMD ["/app/start.sh"]
  2. При запуске через docker run: Принудительно указать UID/GID.
    docker run -u 1001:1001 my-app:latest
  3. В Docker Compose:
    services:
      app:
        image: my-app:latest
        user: "1001:1001"

Важные нюансы:

  • Если приложению нужен доступ к привилегированным портам (<1024), можно использовать setcap на бинарник в образе или запускать через reverse proxy.
  • Для работы с volumes необходимо убедиться, что пользователь в контейнере имеет права на чтение/запись соответствующих файлов и директорий на хосте.