docker - comment exécuter x desktop dans un conteneur?


10

J'essaie de configurer ma machine Linux pour exécuter plusieurs systèmes d'exploitation invités, l'un d'entre eux étant une machine virtuelle Windows et un autre un conteneur Linux. Le but ici est de m'empêcher de gâcher le système hôte, tout en étant libre d'utiliser le système d'exploitation de base et de jouer avec le matériel hôte. Finalement, en plus d'exécuter mon bureau dans le conteneur, j'espère pouvoir exécuter des simulations accélérées par les graphiques, etc. Puisque Docker a une version géniale des conteneurs intégrée, cela semblait être une bonne idée de l'utiliser. Libvirt ferait peut-être tout aussi bien avec LXC, mais le mode privilégié de Docker facilite la configuration des périphériques dans le conteneur.

J'ai fait quelques recherches et trouvé déjà quelques réponses, mais j'ai du mal à tout rassembler.

Contexte dans LXC

L'exécution de X à partir de LXC m'a aidé à voir comment je peux configurer un conteneur avec (ie):

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

et en utilisant

mknod -m 666 dri/card0 c 226 0

à l'intérieur du conteneur pour se connecter au périphérique hôte.

Docker

De cuda - Utilisation du GPU à partir d'un conteneur Docker Docker, j'ai vu que je peux obtenir la même configuration pour fonctionner dans Docker avec le backend LXC.

Il m'est apparu que si un conteneur Docker est exécuté en mode privilégié, il peut accéder au GPU normalement sans cette configuration supplémentaire. J'ai donc lancé un système de base, installé des pilotes graphiques, xorg-server, xorg-xinit et un gestionnaire de fenêtres pour le tester.

Premier essai

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

D'accord, je pensais que j'étais sur tty2.

# tty
/dev/console

Ce n'est pas ce à quoi je m'attendais.

# chvt 2
# tty
/dev/tty2

Eh bien, il semble que cela ait fonctionné. Essayons # startxencore. Il a démarré le gestionnaire de fenêtres, avec le curseur au centre. Pas de réponse de la souris. Aucune réponse du clavier. Essayons de changer le tty avecCtrl-Alt+F3 . Pas de réponse. Eh bien, il semble que je devrai redémarrer à froid.

Deuxième essai

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

Quelle? Je ne peux pas le changer maintenant?

A continué

Après avoir essayé une autre fois, je l'ai changé de tty et startx a de nouveau gelé l'ordinateur.

Et maintenant?

Donc, je suis maintenant dans une impasse. Je veux vraiment pouvoir utiliser un conteneur - Docker préféré, LXC avec libvirt est également acceptable - pour fonctionner comme mon système d'exploitation quotidien tout en conservant un OS hôte léger.

Est-il préférable d'utiliser Docker avec le mode privilégié ici, ou d'utiliser le backend LXC explicite et d'essayer les options répertoriées ci-dessus?

Je prévois déjà d'utiliser libvirt (peut-être sous vagrant-libvirt) pour gérer mon Windows vm, serait-il donc à peu près la même chose pour moi d'utiliser libvirt ou vagrant-LXC dans ce cas?

Edit: lecture de LXC vs. Docker , j'ai l'impression que puisque les conteneurs Docker et Docker sont destinés aux environnements à application unique, il serait peut-être préférable d'utiliser LXC au lieu de Docker pour fonctionner comme mon système d'exploitation quotidien. Pensées?

Edit: J'ai découvert que, comme docker, il existe une commande lxc-device qui me permet de contourner les étapes cgroups et mknod. Alors qu'avant j'ai pu obtenir x pour démarrer et geler mon système, il n'y a plus d'erreur maintenant. Peut-être pourrais-je éventuellement comprendre cela, car personne ne semble être là-bas.

Mise à jour: j'ai la souris qui fonctionne. Sur l'invité, j'ai installé xf86-input-mouse et xf86-input-keyboard. Sur l'hôte, j'ai exécuté ce qui suit:

# 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

Travaux!


Je suis assez convaincu que LXC est ce que je dois utiliser, et non Docker. Malheureusement, il est assez difficile de trouver une documentation à jour sur la liaison d'un terminal spécifique à un conteneur afin que je puisse exécuter X. Mon hôte et mon invité utilisent systemd, alors que toute la documentation autour est liée à / etc / inittab. Quelqu'un sait-il comment travailler correctement avec les conteneurs LXC pour les amener à "posséder" un tty sur l'hôte?
Paul

Quand j'ai donné à LXC son propre terminal et que je lui ai assigné des cartes vidéo, j'ai essayé startxavec exec twm, mais le tout était figé de mon point de vue. Aucune réponse au clavier ou à la souris.
Paul

unix.stackexchange.com/questions/18003/linux-lxc-deploying-images-with-tiniest-possible-x11 semble avoir une réponse pertinente. Je pense que je dois transmettre la chaîne / dev / input. Je vais essayer ça.
Paul


Eh bien, je pensais que j'avais réglé le clavier. Mais maintenant ça ne marche plus.
Paul

Réponses:


1

Cette question avait la réponse dont j'avais besoin. Bien sûr, j'ai utilisé à la lxc-deviceplace des définitions de cgroup dans le fichier de configuration. Cependant, dans mon cas, je n'ai réussi à faire fonctionner le clavier en X que si je le démarre sur un autre terminal.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.