docker-컨테이너에서 x 데스크탑을 실행하는 방법은 무엇입니까?


10

여러 게스트 OS를 실행하도록 Linux 시스템을 설정하려고합니다. 하나는 Windows VM이고 다른 하나는 Linux 컨테이너입니다. 여기서 목표는 기본 운영 체제를 자유롭게 운영하고 호스트 하드웨어를 사용하면서 호스트 시스템을 엉망으로 만드는 것을 방지하는 것입니다. 결국 컨테이너에서 데스크톱을 실행하는 것 외에도 그래픽 가속 시뮬레이션 등을 실행하려고합니다. Docker에는 컨테이너와 같은 git 같은 버전의 컨테이너가 내장되어 있으므로 사용하는 것이 좋습니다. libvirt는 LXC와 마찬가지로 잘 작동하지만 docker의 권한 모드는 컨테이너에 장치를 구성하지 않아도됩니다.

나는 약간의 연구를 해왔고 이미 몇 가지 대답을 생각해 냈지만 모두 통합하는 데 어려움을 겪고 있습니다.

LXC의 배경

LXC에서 X를 실행 하면 다음과 같이 컨테이너를 구성하는 방법을 알 수 있습니다.

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

그리고 사용

mknod -m 666 dri/card0 c 226 0

컨테이너 내부에서 호스트 장치에 연결합니다.

도커

에서 CUDA - 고정 표시기 컨테이너에서 GPU를 사용하여 , 나는이 LXC 백엔드와 부두 노동자의 작업에 동일한 설정을 얻을 수있는 것을 보았다.

도커 컨테이너가 권한 모드로 실행되면이 추가 구성없이 정상적으로 GPU에 액세스 할 수있는 것으로 나타났습니다. 그래서 기본 시스템을 시작하고 그래픽 드라이버, 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가 컴퓨터를 다시 고정했습니다.

지금 무엇?

그래서 지금은 지나가고 있습니다. 린 호스트 OS를 유지하면서 매일 운영 체제로 실행하기 위해 컨테이너를 사용할 수 있기를 원합니다.

여기에서 권한 모드로 Docker를 사용하거나 명시 적 LXC 백엔드를 사용하고 위에 나열된 옵션을 사용하는 것이 가장 좋습니까?

이미 Windows VM을 관리하기 위해 libvirt (vagrant-libvirt에서)를 사용할 계획이므로이 경우 libvirt 또는 vagrant-LXC를 사용하는 것과 거의 같습니까?

편집 : LXC와 Docker를 읽으면 Docker 및 Docker 컨테이너가 단일 응용 프로그램 환경을위한 것이므로 Docker 대신 LXC를 사용하여 일상 운영 체제로 실행하는 것이 가장 좋습니다. 생각?

편집 : docker와 같이 cgroups 및 mknod 단계를 무시할 수있는 lxc-device 명령이 있음을 발견했습니다. 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가 아니라 사용해야하는 것임을 확신합니다. 불행히도 X를 실행할 수 있도록 특정 tty를 컨테이너에 바인딩하는 방법에 대한 최신 문서를 찾는 것은 매우 어려운 일입니다. 호스트와 게스트 모두 systemd를 사용하지만 주변의 모든 문서는 / etc / inittab과 관련이 있습니다. 누구든지 LXC 컨테이너로 올바르게 작업하여 호스트에서 tty를 "소유"하는 방법을 알고 있습니까?
Paul

나는 그것을 LXC에게 자신의 청각 장애 및 할당 비디오 카드를 준 때, 나는 노력 startx으로 exec twm하지만, 모든 일이 내 관점에서 동결했다. 키보드 나 마우스에 응답이 없습니다.
Paul

unix.stackexchange.com/questions/18003/linux-lxc-deploying-images-with-tiniest-possible-x11과 관련이있는 것으로 보입니다. / dev / input 체인을 전달해야한다고 생각합니다. 나는 그것을 시도 할 것이다.
Paul


글쎄, 나는 키보드를 정리했다고 생각했다. 그러나 이제는 다시 작동하지 않습니다.
Paul

답변:


1

이 질문 에는 내가 필요한 대답 있었습니다. 물론 lxc-device구성 파일에서 cgroup 정의 대신 사용 했습니다. 그러나 제 경우에는 다른 tty에서 키보드를 시작하면 X에서 키보드가 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.