Запуск vncserver с использованием supervisord внутри контейнера Linux

Я пытаюсь запустить vncserver с помощью supervisord во время загрузки контейнера lxc (я не думаю, что быть контейнером имеет значение). Проблема в том, что машина запускается как root. Мой раздел программы супервизора выглядит так:

[program:vnc]
directory=/
user=ubuntu
environment=HOME="/home/ubuntu",USER="ubuntu"
priority=901
command=/usr/bin/vncserver -fg -geometry 1024x768 :1

Однако я обнаружил, что файлы журнала показывают, что он пытается создать пароль, хотя пароль уже существует в /home/ubuntu/.vnc/passwd.

Интересно, я что-то упускаю? Разве пользователь не должен изменить пользователя, $HOME и $USER перед запуском команды?


person Debnath Sinha    schedule 03.10.2013    source источник
comment
Можете ли вы опубликовать Dockerfile, показывающий, как воспроизвести проблему? (Возможно, как gist, pastebin или что-то подобное? Gist лучше, потому что вы можете добавить фиктивный файл passwd...)   -  person jpetazzo    schedule 06.10.2013


Ответы (1)


Вы можете определить запуск контейнера с конкретным именем пользователя (если он существует) или UID без какого-либо существующего пользователя в образе/контейнере.

Документация по Docker: https://docs.docker.com/engine/reference/run/#user

ПОЛЬЗОВАТЕЛЬ

root (id = 0) — пользователь по умолчанию в контейнере. Разработчик образа может создавать дополнительных пользователей. Эти пользователи доступны по имени. При передаче числового идентификатора пользователю не обязательно существовать в контейнере.

Разработчик может установить пользователя по умолчанию для запуска первого процесса с помощью инструкции USER Dockerfile. При запуске контейнера оператор может переопределить инструкцию USER, передав параметр -u.

-u="": Username or UID

Примечание: если вы передаете числовой идентификатор пользователя, он должен быть в диапазоне 0-2147483647.

person Lanti    schedule 12.01.2016