web-dev-qa-db-ja.com

Docker-コンテナでxデスクトップを実行する方法?

Linuxマシンをセットアップして、複数のゲストOSを実行しようとしています。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

コンテナ内でホストデバイスに接続します。

Docker

cuda-Dockerコンテナーから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を試してみましょう。カーソルを中央にしてウィンドウマネージャを起動しました。マウスが反応しない。キーボードが応答しない。 Ctrl-Alt+F3でttyを変更してみましょう。応答なし。まあ、それは私が冷たい再起動する必要があるようです。

二回目

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

何?今は変更できませんか?

続く

もう一度試してみたところ、ttyを変更するようになり、startxでコンピューターを再びフリーズしました。

今何?

それで、私は今行き詰まりにいます。私は本当にコンテナを使用できるようにしたい-Dockerを優先し、libvirtを備えたLXCも受け入れられる-無駄のないホストOSを維持しながら、日常のオペレーティングシステムとして実行する。

ここで特権モードでDockerを使用するか、明示的なLXCバックエンドを使用して上記のオプションを試すのが最善ですか?

Libvirt(おそらくvagrant-libvirtの下)を使用してWindows vmを管理することをすでに計画しているので、この場合、libvirtまたはvagrant-LXCを使用することはほぼ同じですか?

編集: LXC vs. 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

動作します!

10
Paul

この質問 には私が必要とする答えがありました。もちろん、私はlxc-device設定ファイルのcgroup定義の代わりに。ただし、私の場合、別のttyでキーボードを起動した場合にのみ、キーボードをXで動作させることができました。

1
Paul