无法访问Ubuntu Docker容器中的摄像头



我正在编写一个简单的Opencv代码,它可以捕捉图像并向我们展示。但每当我运行它时,它都会告诉我无法访问带有此索引的相机。

我试着用这个命令运行我的docker文件docker run-ti--设备/dev/video0:/dev/video0 pradyumb10/ubuntu-python3/bin/bash这打开相机一秒钟,然后它关闭相机并给出一个错误";无法显示";

您的相机很可能是网络相机,很可能安装在/dev/video0/dev/video{N}上-您必须首先在主机上找到{N}。

一旦你得到它,你可以试着把它安装到你的docker容器中,如下所示:

mount /dev/video0 /testvideo
docker run -it --rm --read-only -v "/testvideo:/testvideo" bash

之后,docker中的应用程序应该尝试连接到/testvideo,而不是/dev/video0

附言:我自己没有尝试过,但觉得它linux应该不会像其他设备一样安装网络摄像头。我会尝试一下,但不能保证:(

我的问题是,我在特权模式下与root以外的用户一起运行容器,即使用选项-u vscode --privileged --device /dev/video0:/dev/video0(以及其他选项(。privileged选项导致网络摄像头所有者和组为root,但由于我运行容器时vscode访问/dev/video0的权限被拒绝。

解决方案是不在priviledged模式下运行容器(即,省略--privileged标志——导致网络摄像头所有者为root,但组为video(,并将vscode用户添加到video组中。通过将这一行添加到我的Dockerfile:中,可以很容易地完成

RUN usermod -aG vscode video

以及重建容器。如果必须在privileged模式下运行容器,则可以在容器运行后使用sudo chown root:video /dev/video0

最新更新