docker - como executar x desktop em um contêiner?

10

Estou tentando configurar minha máquina Linux para executar vários sistemas operacionais convidados, sendo um deles uma VM do Windows e outro um contêiner do Linux. O objetivo aqui é me impedir de bagunçar o sistema host, estando livre para operar o sistema operacional básico e brincar com o hardware host. Eventualmente, além de rodar minha área de trabalho no container, espero rodar simulações aceleradas por gráficos, etc. Como o Docker tem um bom controle de conteúdo de contêineres embutidos, pareceu uma boa idéia usá-lo. Talvez o libvirt funcionasse tão bem com o LXC, mas o modo privilegiado do docker torna mais fácil não ter que configurar dispositivos para o contêiner.

Eu fiz uma pequena pesquisa e já tenho algumas respostas, mas estou com problemas para juntar tudo.

Antecedentes em LXC

Rodar X do LXC me ajudou a ver como eu posso configurar um container com (ie) :

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

e usando

mknod -m 666 dri/card0 c 226 0

dentro do contêiner para se conectar ao dispositivo host.

Docker

De cuda - Usando a GPU de um contêiner docker , vi eu posso obtenha a mesma configuração para trabalhar no Docker com o backend do LXC.

Pareceu-me que, se um contêiner docker é executado no modo privilegiado, ele pode acessar a GPU normalmente sem essa configuração extra. Então, ativei um sistema básico, instalei drivers gráficos, xorg-server, xorg-xinit e um gerenciador de janelas para testá-lo.

Primeiro tente

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

Ok, achei que estava no tty2.

# tty
/dev/console

Isso não é o que eu esperava.

# chvt 2
# tty
/dev/tty2

Bem, parece que funcionou. Vamos tentar # startx novamente. Começou o gerenciador de janelas, com o cursor no centro. Nenhuma resposta do mouse. Nenhuma resposta do teclado. Vamos tentar mudar o tty com Ctrl-Alt+F3 . Sem resposta. Bem, parece que vou ter que reiniciar o frio.

Segunda tentativa

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

O que? Eu não posso mudar isso agora?

Continuação

Depois de tentar outra vez, consegui que mudasse tty e startx congelou o computador novamente.

E agora?

Então, estou agora em um impasse. Eu realmente quero ser capaz de usar um contêiner - Docker preferido, LXC com libvirt também é aceitável - para executar como meu sistema operacional diário, mantendo um sistema operacional enxuto.

É melhor usar o Docker com o modo privilegiado aqui, ou usar o back-end explícito do LXC e experimentar as opções listadas acima?

Já estou planejando usar o libvirt (possivelmente sob vagrant-libvirt) para gerenciar meu Windows vm, então seria o mesmo para mim usar o libvirt ou o vagrant-LXC nesse caso?

Editar: lendo LXC vs. Docker , tenho a impressão de que, como os contêineres Docker e Docker são destinados para ambientes de aplicativo único, talvez seja melhor usar o LXC em vez do Docker para executar como meu sistema operacional diário. Pensamentos?

Edit: Descobri que, como o docker, existe um comando lxc-device que me permite ignorar as etapas de cgroups e mknod. Considerando que antes eu era capaz de obter x para iniciar e congelar o meu sistema, apenas erros agora. Talvez eu possa descobrir isso eventualmente, já que ninguém parece estar lá fora.

Atualização: tenho o mouse funcionando. No guest, eu instalei o xf86-input-mouse e o xf86-input-keyboard. No host, eu corri o seguinte:

# 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

Funciona!

    
por Paul 19.03.2015 / 20:47

1 resposta

1

Esta pergunta teve a resposta que eu necessário. Claro, eu usei lxc-device em vez das definições do cgroup no arquivo de configuração. No entanto, no meu caso, eu só tenho o teclado para trabalhar em X, se eu começar em um tty diferente.

    
por 24.03.2015 / 14:11