質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

2934閲覧

Kivyで作成したGUIアプリをDockerコンテナ内で起動し、ホストPCで表示したい

iruka-s

総合スコア12

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/07/16 06:32

編集2020/07/17 01:02

前提・実現したいこと

ローカルで作成したKivyアプリをDocker上に移植することを考えています。
開発環境を記します。

(ホストPC)

  • Ubuntu:18.04
  • Python:3.6.9
  • docker:19.03.6 ※nvidia-dockerは未インストール
  • NVIDIA-SMI:440.100
  • CUDA:10.2

(Dockerコンテナ)

  • Ubuntu:20.04
  • Python:3.6.9

ググって試してみましたが、エラーが解決できずに手が止まってしまいました。

試したこと

参考にしたサイト

以下のコマンドを実行してコンテナを起動しました。

docker run --privileged --net host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp.X11-unix -it -v /(作成したkivyプログラムのパス)/:/home/ (イメージID)

コンテナ起動後、コンテナ内のhomeディレクトリに移動してkivyプログラムmain.pyを実行しました。
すると以下のようなエラーが出ます。

root@xxx:/home# python3.6 main.py [WARNING] [Config ] Older configuration version detected (0 instead of 21) [WARNING] [Config ] Upgrading configuration in progress. [INFO ] [Logger ] Record log in /root/.kivy/logs/kivy_20-07-16_0.txt [INFO ] [Kivy ] v1.11.1 [INFO ] [Kivy ] Installed at "/usr/local/lib/python3.6/site-packages/kivy/__init__.py" [INFO ] [Python ] v3.6.9 (default, Jul 15 2020, 09:01:41) [GCC 9.3.0] [INFO ] [Python ] Interpreter at "/usr/local/bin/python3.6" [INFO ] [Factory ] 184 symbols loaded [INFO ] [ImageLoaderFFPy] Using ffpyplayer 4.3.1 [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_ffpyplayer, img_gif (img_pil ignored) [INFO ] [Text ] Provider: sdl2 [INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored) libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast X Error of failed request: GLXBadContext Major opcode of failed request: 154 (GLX) Minor opcode of failed request: 6 (X_GLXIsDirect) Serial number of failed request: 92 Current serial number in output stream: 91

このエラーについて調べたところ、NVIDIA Driverを入れると
「libGL.so.1がmesaとnvidiaの両方によって提供されるあいまいなlibGLを指すことがあります」
と書かれてあるサイトがあったので、以下のコマンドをホストPCで実行して確かめました。

root@xxx# ldconfig -p | grep -i gl.so libwayland-egl.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1 libcogl.so.20 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcogl.so.20 libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1 libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/libGL.so.1 libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so.1

たしかにlibGL.so.1が2つあったので、片方を削除して再度確認しました。

rm /usr/lib/i386-linux-gnu/libGL.so.1 root@xxx# ldconfig -p | grep -i gl.so libwayland-egl.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1 libcogl.so.20 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcogl.so.20 libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1 libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/libGL.so.1 libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so.1

変わってない。。。

このKivy実行時のエラーについて他にも調べてみましたが、いまいち有効な手段が見つかりませんでした。
解決手段をご存じの方がいらっしゃいましたらご教授いただけますと幸いです。

補足1(2020/07/16)

いくつかのサイトで「xtermが開ければ準備OK!」と書かれてあったので確かめました。
コンテナ内にapt install -y xtermでインストール後、xtermを実行すると
xtermのターミナルを開くことは出来ました。
しかしKivyは実行できず。

追加(2020/07/17)

docker19.03以降はGPUにネイティブ対応しているらしい。
もしかしたらGPUを使おうとしているのでは?と考えてホストPCにnvidia-container-toolkitをインストール。
再起動後に以下コマンドを実行してみるとエラー内容が変わっていました。

root@xxx# docker run --gpus 1 --privileged --net host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp.X11-unix -it -v /(Kivyプログラム保管場所)/:/home/ (イメージID) root@xxx:/home# export NVIDIA_DRIVER_CAPABILITIES=graphics root@xxx:/home# python3.6 main.py [WARNING] [Config ] Older configuration version detected (0 instead of 21) [WARNING] [Config ] Upgrading configuration in progress. [INFO ] [Logger ] Record log in /root/.kivy/logs/kivy_20-07-17_0.txt [INFO ] [Kivy ] v1.11.1 [INFO ] [Kivy ] Installed at "/usr/local/lib/python3.6/site-packages/kivy/__init__.py" [INFO ] [Python ] v3.6.9 (default, Jul 16 2020, 08:54:06) [GCC 9.3.0] [INFO ] [Python ] Interpreter at "/usr/local/bin/python3.6" [INFO ] [Factory ] 184 symbols loaded [INFO ] [ImageLoaderFFPy] Using ffpyplayer 4.3.1 [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_ffpyplayer, img_gif (img_pil ignored) [INFO ] [Text ] Provider: sdl2 [INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored) No protocol specified [INFO ] [Window ] Provider: x11(['window_egl_rpi', 'window_sdl2'] ignored) No protocol specified Couldn't connect to X server

Xtermは実行できるか確認すると以下のエラー

root@xxx:/home# xterm No protocol specified Warning: This program is an suid-root program or is being run by the root user. The full text of the error or warning message cannot be safely formatted in this environment. You may get a more descriptive message by running the program as a non-root user or by removing the suid bit on the executable. xterm: Xt error: Can't open display: %s

実行できなくなっていました。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

色々試した結果自己解決しました。
nvidia-container-toolkitでKivyを動かした

まず自分のPCにnvidia-container-toolkitが入っていなかったのでインストール。docker19.03以降はデフォルトでGPUに対応しているらしい。GPUを使うためにはnvidia-container-toolkitが必要。NVIDIA Docker って今どうなってるの? (19.11版)

次にxhostに権限を与える。実行コマンドはxhost +

dockerを立ち上げる際には以下のコマンドを実行。使用するGPUの指定、ネットワークをホストと共有、ディスプレイポートも共有する。

docker run --gpus all --net host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp.X11-unix -it -v /(ホストPCのディレクトリパス)/:/home/ (イメージID)

環境変数NVIDIA_DRIVER_CAPABILITIESの値をgraphicsにする。設定できる値はこのページにまとめてあった。設定するにはコンテナ内でexport NVIDIA_DRIVER_CAPABILITIES=graphicsを実行。DockerfileのENVで設定していればそれでもOK。

コンテナ内の/home/に移動してKivyプログラムを実行すると無事に起動。

NVIDIA Dockerに対応していないと噂のWindowsだとどうなるのとか、19.03以前のDockerだとどうなるのとかで今後また詰まりそうですが、とりあえずは解決しました。

投稿2020/07/17 01:54

編集2020/07/17 01:55
iruka-s

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問