docker-composeからRVizを起動する

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

今回は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にも記載しました。

Share — X · Bluesky · はてブ ·