docker - コンテナでx-desktopを実行する方法は?

docker - コンテナでx-desktopを実行する方法は?

複数のゲストオペレーティングシステムを実行するようにLinuxシステムを設定しようとしています。そのうちの1つはWindows VMで、もう1つは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。応答なし。わかりました。再起動する必要があるようです。

2回目の試み

# 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でキーボードが動作するようにすることができます。

関連情報