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

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

여러 게스트 운영 체제를 실행하도록 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 백엔드를 통해 Docker에서 동일한 설정을 사용할 수 있음을 발견했습니다.

제가 보기에는 Docker 컨테이너가 특권 모드에서 실행 중이라면 이 추가 구성 없이 정상적으로 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 및 libvirt 허용)를 사용할 수 있기를 바랍니다.

여기서는 특권 모드로 Docker를 사용하는 것이 더 낫습니까, 아니면 명시적인 LXC 백엔드를 사용하고 위에 나열된 옵션을 시도하는 것이 더 낫습니까?

이미 libvirt(아마도 vagrant-libvirt 아래)를 사용하여 Windows VM을 관리할 계획인데, 이 경우 libvirt 또는 vagrant-LXC를 사용해도 대략 동일한 효과를 얻을 수 있습니까?

편집: 읽기LXC와 도커, 내 생각에는 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

일하다!

답변1

이 문제필요한 답변을 얻었습니다. 물론, lxc-device대신 구성 파일의 cgroup 정의를 사용했습니다. 그러나 내 경우에는 다른 tty에서 키보드를 실행해야만 X에서 키보드가 작동하도록 할 수 있습니다.

관련 정보