G03-Docker挂载设备及输出图像

jameslei.com

Docker挂载设备及输出图像

本片文章针对与Ubuntu等Linux系统,测试时使用的系统为Ubuntu 18.04 LTS。

Docker挂载设备

在打开Docker容器时,我们能够通过添加--privileged参数来让Docker容器使用宿主机的现有设备。

除此之外,我们也可以使用--device参数详细明确Docker容器能够使用那些设备。

例如我们希望Docker容器能够使用宿主机的摄像头时,可以这样打开Docker容器:

docker run -it --device=/dev/video0 <image_name>

Docker挂载文件夹

我们能够使用-v参数挂载宿主机文件夹到Docker容器里。

使用方法为:

-v <host_dir>:<container_dir>

Docker输出图像

打开Docker容器后我们通常都是在控制台下进行操作,但是当我们想要运行一些图像或视频类项目时,我们需要进行效果的展示,而这一步通常是需要GUI的,因此我们需要让Docker容器能够展示GUI界面。

我们需要做的,首先是要在宿主机安装xserver,并添加相应的权限:

sudo apt install x11-xserver-utils
xhost +

同时我们需要了解当前显示的环境变量值:

echo $Display

假设输出结果为 0 .

在创建Docker容器时,我们需要添加如下参数:

-v /tmp/.X11-unix:/tmp/.X11-unix
-e DISPLAY=:0

例如:

docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix
    -e DISPLAY=:0 <image_name>

实例

我们下载了OpenPose的Docker镜像并想要做一下实验看看效果。

其中OpenPose的Docker来自于 Docker Hub,该镜像包含了CUDA 10和Python API支持。

然而通过其提供的实例代码,我们没有办法直接运行OpenPose的示例,原因有二:

  1. Docker Container无摄像头设备
  2. Docker Container无显示设备

我们将上文的解决方案合在一起,就能够解决该问题了。此时启动Docker的代码为:

docker run -it --rm --runtime=nvidia
    --device=/dev/video0 -e NVIDIA_VISIBLE_DEVICES=0
    -v /tmp/.X11-unix:/tmp/.X11-unix -eDISPLAY=:0  
    cwaffles/openpose-python

在进入Docker Container后,我们可以输入如下命令来开启摄像头并进行姿态关键点检测:

./build/examples/openpose/openpose.bin

我们也能够使用OpenPose自带的视频进行验证。

./build/examples/openpose/openpose.bin --video examples/media/video.avi

参考

  1. Docker Run
  2. Docker容器显示图形到宿主机屏幕
  3. OpenPose

No Comments Yet