たいりょーくんのメモ

Twitterにツイートするノリで気軽にメモしていくためのブログです。詳しくは https://tiryoh.hateblo.jp/about をお読みください。

docker-composeからRVizを起動する

NVIDIAGPUが有効なLinuxマシンでdocker-composeからGUIアプリケーションを起動するためにいろいろ調べていたところ、 GPUの指定が必要で、それには指定方法が色々あることがわかりました。

tiryoh.hateblo.jp

今回はRVizを起動しようとしていたのですが、上記だけではなく、更にNVIDIA_VISIBLE_DEVICESNVIDIA_DRIVER_CAPABILITIES環境変数を設定する必要もありました。

動いた例をメモしておきます。

起動方法

docker-compose upする前にGUIアプリケーションを使うためにxhostコマンドでX11転送を許可する必要があります。 (docker-compose.yamlの中身については本記事の「docker-composeの設定」を参照) 手っ取り早くやるにはlocalhostからの通信を全部一旦許可します(使い終わったらすぐに戻します)。

$ xhost local:

non-network local connections being added to access control listというメッセージが返ってきたらOKです。 以下のコマンドで許可されているアクセスコントロールリストを確認できます。

$ xhost

次に次のコマンドでdocker-compose.yamlからDockerコンテナを起動すればRVizが起動します。

$ docker-compose up

終了時

localhostからの通信を全部一旦許可していたので、もとに戻しておきます。

$ xhost -local:

docker-composeの設定

docker-compose version 1.27

環境

$ docker-compose --version --short
docker-compose version 1.27.4, build 40524192

$ docker --version
Docker version 20.10.4, build d3cb89e

$ dpkg -l | grep nvidia-docker2
ii  nvidia-docker2                                     2.6.0-1                                          all          nvidia-docker CLI wrapper

$ dpkg -l | grep nvidia-container-toolkit
ii  nvidia-container-toolkit                           1.5.0-1                                          amd64        NVIDIA container runtime hook

$ nvidia-smi | head -n 4
Sun May 23 18:43:41 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39       Driver Version: 460.39       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+

docker-compose.yaml

services: 
  test:
    image: osrf/ros:melodic-desktop-full
    command: [ "roslaunch", "urdf_tutorial", "display.launch" ]
+   runtime: nvidia
    environment:
      DISPLAY: :1
+     NVIDIA_VISIBLE_DEVICES: all
+     NVIDIA_DRIVER_CAPABILITIES: all
    volumes:
      - "/tmp/.X11-unix:/tmp/.X11-unix:rw"

docker-compose version 1.29

環境

$ docker-compose --version --short
docker-compose version 1.29.2, build 5becea4c

$ docker --version
Docker version 20.10.4, build d3cb89e

$ dpkg -l | grep nvidia-docker2
ii  nvidia-docker2                                     2.6.0-1                                          all          nvidia-docker CLI wrapper

$ dpkg -l | grep nvidia-container-toolkit
ii  nvidia-container-toolkit                           1.5.0-1                                          amd64        NVIDIA container runtime hook

$ nvidia-smi | head -n 4
Sun May 23 18:43:41 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39       Driver Version: 460.39       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+

docker-compose.yaml

services: 
  test:
    image: osrf/ros:melodic-desktop-full
    command: [ "roslaunch", "urdf_tutorial", "display.launch" ]
    environment:
      DISPLAY: :1
+     NVIDIA_VISIBLE_DEVICES: all
+     NVIDIA_DRIVER_CAPABILITIES: all
    volumes:
      - "/tmp/.X11-unix:/tmp/.X11-unix:rw"
+   deploy:
+     resources:
+       reservations:
+         devices:
+         - capabilities: [gpu]

今回の件は詳しくは以下のIssueにも記載しました。

github.com