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


10

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

二回目

# 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対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ではないと確信しています。残念ながら、特定のttyをコンテナーにバインドしてXを実行できるようにするための最新のドキュメントを見つけるのはかなり困難です。ホストとゲストの両方がsystemdを使用していますが、関連するすべてのドキュメントは/ etc / inittabに関連しています。LXCコンテナーを正しく操作して、ホスト上のttyを「所有」させる方法を知っている人はいますか?
Paul

LXCに独自のttyを割り当て、それにビデオカードを割り当てると、で試してみstartxましたexec twmが、私の観点からすべてがフリーズしました。キーボードやマウスに反応しません。
ポール

unix.stackexchange.com/questions/18003/linux-lxc-deploying-images-with-tiniest-possible-x11に関連する答えがあるようです。/ dev / inputチェーンを転送する必要があると思います。やってみます。
ポール


さて、キーボードを整理してもらいました。しかし、今は再び機能しません。
Paul

回答:


1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.