docker - как запустить x desktop в контейнере?

10

Я пытаюсь настроить свой компьютер Linux для работы с несколькими гостевыми ОС, одна из которых - виртуальная машина Windows, а другая - контейнер Linux. Цель здесь состоит в том, чтобы не дать мне испортить хост-систему, при этом я могу свободно работать с базовой операционной системой и играть с аппаратным обеспечением хоста. В конце концов, в дополнение к запуску моего рабочего стола в контейнере, я надеюсь запустить графическое ускорение и т. Д. Так как в Docker встроены такие приятные git-подобные версии встроенных контейнеров, было бы неплохо использовать его. Возможно, libvirt будет хорошо работать с LXC, но привилегированный режим докера упрощает настройку устройств в контейнере.

Я провел небольшое исследование и уже нашел несколько ответов, но у меня не получается собрать все это вместе.

Фон в LXC

Запуск X из LXC помог мне увидеть, как я могу настроить контейнер с (то есть):

lxc.cgroup.devices.allow = c 226:0 rwm

и используя

mknod -m 666 dri/card0 c 226 0

внутри контейнера для подключения к хост-устройству.

докер

От cuda - Используя графический процессор из контейнера Docker, я увидел, что могу получить ту же настройку для работы в Docker с бэкэндом LXC.

Мне показалось, что если докер-контейнер запущен в привилегированном режиме, то он может нормально обращаться к графическому процессору без этой дополнительной настройки. Итак, я запустил базовую систему, установил графические драйверы, xorg-server, xorg-xinit и оконный менеджер, чтобы проверить это.

Первая попытка

# startx
Cannot run from a console (or some message like that)

Хорошо, я думал, что я был на tty2.

# tty
/dev/console

Это не то, что я ожидал.

# chvt 2
# tty
/dev/tty2

Ну, похоже, это сработало. Давайте попробуем еще # startxраз. Запустился диспетчер окон, с курсором в центре. Нет ответа мыши. Нет ответа клавиатуры. Давайте попробуем изменить tty с Ctrl-Alt+F3. Нет ответа Ну, похоже, мне придется перезагрузиться.

Вторая попытка

# tty
/dev/console
# chvt 2
# tty
/dev/console

Какие? Я не могу изменить это сейчас?

продолжение

Попробовав еще раз, я заставил его сменить tty, и startx снова заморозил компьютер.

Что теперь?

Итак, я сейчас в тупике. Я действительно хочу иметь возможность использовать контейнер - предпочтительнее Docker, также приемлем LXC с libvirt - чтобы он работал как моя ежедневная операционная система, сохраняя при этом компактную хост-ОС.

Лучше ли здесь использовать Docker с привилегированным режимом или использовать явный бэкэнд LXC и попробовать варианты, перечисленные выше?

Я уже планирую использовать libvirt (возможно, под vagrant-libvirt) для управления моей Windows vm, так что будет ли для меня примерно так же использовать libvirt или vagrant-LXC в этом случае?

Редактировать: читая LXC против Docker , у меня возникает ощущение, что, поскольку контейнеры Docker и Docker предназначены для сред с одним приложением, возможно, было бы лучше использовать LXC вместо Docker для работы в качестве моей повседневной операционной системы. Мысли?

Изменить: Я обнаружил, что, как и Docker, есть команда lxc-device, которая позволяет мне обходить шаги cgroups и mknod. Если раньше я мог заставить x запустить и заморозить свою систему, то теперь это просто ошибки. Возможно, я смогу со временем это выяснить, поскольку, похоже, там никого нет.

Обновление: у меня работает мышь. На гостевой я установил xf86-input-mouse и xf86-input-keyboard. На хосте я запустил следующее:

# lxc-device -n g1 add /dev/input/mice
# lxc-device -n g1 add /dev/dri/card0
# lxc-device -n g1 add /dev/dri/controlD64
# lxc-device -n g1 add /dev/dri/renderD128
# lxc-device -n g1 add /dev/fb0
# lxc-device -n g1 add /dev/tty2

Работает!

Павел
источник
Я совершенно уверен, что мне нужно использовать LXC, а не Docker. К сожалению, сейчас довольно сложно найти актуальную документацию по привязке определенного tty к контейнеру, чтобы я мог запустить X. И мой хост, и гость используют systemd, тогда как вся документация вокруг связана с / etc / inittab. Кто-нибудь знает, как правильно работать с контейнерами LXC, чтобы заставить их "владеть" tty на хосте?
Paul
Когда я дал Lxc свой TTY и правопреемник видеокарту к ней, я попытался startxс exec twm, но все это было заморожено с моей точки зрения. Нет ответа на клавиатуру или мышь.
Пол
unix.stackexchange.com/questions/18003/linux-lxc-deploying-images-with-tiniest-possible-x11, кажется, имеет соответствующий ответ. Я думаю, что мне нужно переслать цепочку / dev / input. Я попробую это.
Paul
Похоже, unix.stackexchange.com/questions/18003/… был ответ, в соответствии с irclog.perlgeek.de/crimsonfu/2015-03-23#i_10327389
Филипп Дурбин
Ну, я думал, что у меня разобралась клавиатура. Но теперь это не работает снова.
Пол

Ответы:

1

На этот вопрос был ответ, который мне был нужен. Конечно, я использовал lxc-deviceвместо определения cgroup в файле конфигурации. Тем не менее, в моем случае, я получил клавиатуру для работы в X, только если я запускаю ее на другом tty.

Павел
источник