Привет! Я пытаюсь разобраться, почему и как некоторые процессы, запускаемые Discourse, выполняются от имени моего обычного пользователя Linux (не root):
В данный момент я запускаю Discourse на Clear Linux, так что это не совсем стандартная базовая система, но я наблюдал такое же поведение при установке Discourse на Debian. В текущей системе я подключился по SSH под своей учётной записью rahim12, выполнил sudo su, а затем установил и настроил всё, что связано с контейнером Discourse. А в предыдущих тестах на Debian я подключался к системе напрямую под пользователем root. Так нормально ли, что некоторые процессы, например воркеры Unicorn, запускаются от имени моего обычного пользователя, и как они узнают, что нужно использовать именно его? Автоматически ли они запускаются под UID Linux 1000?
Это особенность работы Docker.
Пользователь Discourse внутри контейнера имеет UID 1000, поэтому, если вы посмотрите список процессов снаружи контейнера, там будет отображаться пользователь с UID 1000.
В моём случае это отображается как claudia, так как на всех моих серверах для UID 1000 используется это имя пользователя.
Ах, интересно, получается, что хост-ОС выполняет поиск имени пользователя для UID 1000 на хосте, но на самом деле оно принадлежит другому UID 1000 внутри контейнера?
Верно.
И это меня уже несколько раз подводило, потому что на одном из моих локальных серверов разработки есть Docker-контейнер с процессами, работающими от UID 1001 (внутреннее имя пользователя контейнера — WebDev), а в ОС хоста отображается учётная запись, отключённая ещё в 2019 году, но которая должна сохраниться по историческим причинам.
Большое спасибо за разъяснения, это действительно довольно странная особенность Docker. Как обычный администратор Linux, привыкший вручную устанавливать и настраивать каждый компонент стека, я не до конца чувствую себя комфортно с непрозрачной парадигмой контейнеризации и её «автоматическими» скриптами настройки, которые подтягивают зависимости и конфигурации из миллиона разных источников. Но трудно спорить со скоростью и воспроизводимостью развёртывания Discourse, а также работающего мной Docker-сервера почты, поэтому я не жалею.
Наверное, стоило упомянуть, что это особенность Docker, которая, в свою очередь, является особенностью Linux-контейнеров в целом.
По сути, они похожи на *BSD-джails, но на самом деле гораздо строже в плане изоляции компонентов.
Лично я не большой поклонник такой технологии, но полностью понимаю, почему Discourse использует Docker. Изоляция действительно значительно усложняет влияние изменений на хост-системе на работу Discourse. Фактически, за исключением одного обновления ядра, которое ненадолго сломало Docker, у меня ни разу не случалось, чтобы обновление хоста нарушило работу Discourse. 