Как монтировать файлы от имени конкретного пользователя при использовании переназначения пространства имен Docker?

Как монтировать файлы от имени конкретного пользователя при использовании переназначения пространства имен Docker?

Описание проблемы:

У меня есть веб-сервис, использующий docker для запуска nginx и haproxy (среди других контейнеров). Я хочу предоставить эти образы docker через частный реестр docker hub, и поэтому не хочу встраивать в образы какой-либо сертификат tls, чтобы каждый клиент мог монтировать свой собственный сертификат в контейнер (nginx и haproxy).

Чтобы обезопасить контейнер haproxy, я запускаю его без привилегий root (порт выше 1000 сопоставлен с портом ниже 1000 в docker-compose). Контейнер nginx основан на официальном образе nginx и, таким образом, использует root только при запуске службы, а затем меняет пользователя на nginx.

Для дополнительной защиты контейнеров я настроил docker-remapping (настройка по умолчанию с пользователем dockremap по умолчанию).

Проблема:

Открытый и закрытый ключ сертификата TLS монтируются в контейнерах как пользователь «nobody», и поэтому контейнеры haproxy и nginx не могут прочитать эти файлы, поскольку они используют разных пользователей (не root) для чтения файлов.

Решения (на данный момент):

  1. Я могу сделать файлы TLS доступными для чтения всем, например, 644, это работает, но это ужасное и небезопасное решение.

  2. Я мог бы создать свой собственный образ nginx, как я это сделал с образом haproxy, и добавить пользователей контейнера в группу nobody, чтобы иметь возможность изменить разрешения сертификатов на 640. Это отвратительный хак.

  3. Отменить docker remapping, чтобы я мог монтировать файлы сертификатов с тем же uid, что и у пользователя в контейнерах nginx и haproxy. Это означало бы, что я теряю безопасность docker-remapping, и файлы сертификатов должны иметь тот же uid, что и у пользователя в контейнерах haproxy и nginx.

  4. Создавать новые образы во время установки (и при обновлении базовых образов или файлов сертификатов) на сервере моего клиента с использованием моих существующих образов из моего личного репозитория docker в качестве базовых образов. Файлы сборки docker на сервере моего клиента будут очень простыми и предназначены только для копирования файлов сертификатов ssl в контейнеры с правильными разрешениями.

Вопрос:

Есть ли способ сопоставить UID хоста с UID пользователя внутри контейнера, чтобы смонтированные файлы имели правильный UID?

Связанный контент