G03-Docker挂载设备及输出图像
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的示例,原因有二:
- Docker Container无摄像头设备
- 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