docker - jak uruchomić x desktop w kontenerze?


10

Próbuję skonfigurować mój komputer z systemem Linux do uruchamiania wielu systemów-gości, jeden z nich to VM maszyny Windows, a drugi kontener Linux. Chodzi mi o to, żeby nie zepsuć systemu hosta, mając jednocześnie swobodę obsługi podstawowego systemu operacyjnego i zabawy ze sprzętem hosta. W końcu, poza uruchomieniem pulpitu w kontenerze, mam nadzieję uruchomić symulacje przyspieszone grafiką itp. Ponieważ Docker ma tak ładną wbudowaną wersję kontenerów jak w git, wydaje się, że warto z niego korzystać. Być może libvirt przydałby się równie dobrze z LXC, ale tryb uprzywilejowany dokera ułatwia konfigurację urządzeń w kontenerze.

Przeprowadziłem już kilka badań i znalazłem już kilka odpowiedzi, ale mam problem z ich złożeniem.

Tło w LXC

Uruchomienie X z LXC pomogło mi zobaczyć, jak mogę skonfigurować kontener z (tj.):

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

i za pomocą

mknod -m 666 dri/card0 c 226 0

wewnątrz kontenera, aby połączyć się z urządzeniem hosta.

Doker

Od cuda - Używając GPU z kontenera dokującego , zobaczyłem, że mogę uzyskać taką samą konfigurację do pracy w Dockerze z backendem LXC.

Wydawało mi się, że jeśli kontener dokera jest uruchomiony w trybie uprzywilejowanym, może normalnie uzyskać dostęp do GPU bez tej dodatkowej konfiguracji. Uruchomiłem więc system podstawowy, zainstalowałem sterowniki graficzne, xorg-server, xorg-xinit i menedżera okien, aby to przetestować.

Pierwsza próba

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

Okej, myślałem, że jestem na tty2.

# tty
/dev/console

Nie tego się spodziewałem.

# chvt 2
# tty
/dev/tty2

Wygląda na to, że zadziałało. Spróbujmy # startxjeszcze raz. Uruchomił menedżera okien, z kursorem pośrodku. Brak odpowiedzi myszy. Brak reakcji klawiatury. Spróbujmy zmienić tty za pomocą Ctrl-Alt+F3. Brak odpowiedzi. Wygląda na to, że będę musiał zrestartować komputer na zimno.

Druga próba

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

Co? Nie mogę tego teraz zmienić?

Nieprzerwany

Po kolejnej próbie udało mi się zmienić tty i startx ponownie zamroził komputer.

Co teraz?

Jestem teraz w impasie. Naprawdę chcę mieć możliwość korzystania z kontenera - preferowany Docker, dopuszczalne jest także używanie LXC z libvirt - jako mojego codziennego systemu operacyjnego, z zachowaniem systemu operacyjnego hosta lean.

Czy najlepiej tutaj używać Dockera z trybem uprzywilejowanym, czy też użyć jawnego zaplecza LXC i wypróbować opcje wymienione powyżej?

Planuję już używać libvirt (prawdopodobnie pod vagrant-libvirt) do zarządzania moją maszyną wirtualną z systemem Windows, więc czy w takim przypadku korzystanie z libvirt lub vagrant-LXC byłoby podobne?

Edycja: czytając LXC vs. Docker , mam wrażenie, że ponieważ Docker i kontenery Docker są przeznaczone do środowisk z jedną aplikacją, być może lepiej byłoby użyć LXC zamiast Docker do uruchamiania jako mojego codziennego systemu operacyjnego. Myśli?

Edycja: Odkryłem, że podobnie jak doker, istnieje polecenie lxc-device, które pozwala mi ominąć grupy cgroups i kroki mknod. Podczas gdy zanim byłem w stanie uzyskać x, aby uruchomić i zamrozić mój system, teraz po prostu błędy. Być może w końcu uda mi się to rozgryźć, ponieważ wydaje się, że nikogo tam nie ma.

Aktualizacja: Mam działającą mysz. Na gościu zainstalowałem xf86-input-mouse i xf86-input-keyboard. Na hoście uruchomiłem następujące:

# 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

Pracuje!


Jestem przekonany, że LXC jest tym, czego potrzebuję, a nie Docker. Niestety, ciężko jest znaleźć aktualną dokumentację dotyczącą powiązania konkretnego tty z kontenerem, aby móc uruchomić X. Zarówno mój host, jak i gość używają systemd, podczas gdy cała dokumentacja jest związana z / etc / inittab. Czy ktoś wie, jak poprawnie pracować z kontenerami LXC, aby „zdobyć” tty na hoście?
Paul

Kiedy dałem lxc własną tty i karty wideo przypisać do niej, starałem startxsię exec twm, ale cała sprawa została zamrożona z mojego punktu widzenia. Brak reakcji na klawiaturę lub mysz.
Paul

unix.stackexchange.com/questions/18003/linux-lxc-deploying-images-w-tiniest-possible-x11 wydaje się mieć odpowiednią odpowiedź. Myślę, że muszę przekazać łańcuch / dev / input. Spróbuję tego.
Paul


Myślałem, że mam uporządkowaną klawiaturę. Ale teraz to już nie działa.
Paul

Odpowiedzi:


1

To pytanie miało odpowiedź, której potrzebowałem. Oczywiście użyłem lxc-devicezamiast definicji cgroup w pliku konfiguracyjnym. Jednak w moim przypadku klawiaturę uruchomiłem w X tylko wtedy, gdy uruchomię ją na innym tty.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.