Действительно важно то, что, как только ваша служба запущена и работает, она не запускается от имени пользователя root.(Это немного менее важно в Docker, чем нет, но «не будьте root» по-прежнему считается лучшей практикой.) Оба варианта, которые вы предлагаете, являются допустимыми.
Ваш второй вариант, «запускать какroot, а затем отбросить привилегии », в Docker это не распространено, но по духу оно совпадает с тем, что делают большинство демонов Unix. Официальное изображение Hashicorp Consul - единственное, что я знаю о том, что на самом деле это делает.В частности, он ожидает запуска с подключенным каталогом данных, поэтому он chown -R consul
каталог данных от имени пользователя root до запуска самого демона.Я ожидаю, что это будет довольно типичное использование этого шаблона.
Если вам не нужно выполнять такую настройку перед запуском, указав произвольный некорневой USER
в концеваш Dockerfile
механически проще и проверяет тот же флажок «не быть root».
Есть много вопросов SO, связанных с попыткой запустить контейнер в качестве текущего пользователя хоста или попыткой запустить упакованный инструментв Docker против файловой системы хоста.Это неудобно, так как основная цель Docker - изолировать контейнеры от этих деталей хоста.Если вам нужно выбрать пользователя, от имени которого запускается контейнерный процесс, вам нужна стандартная опция docker run -u
и потребуется первая опция.