2

我有一个 docker 容器,它使用 gstreamer 插件来捕获相机的输入。使用 Bastler 相机运行良好,但现在我需要使用 IDS uEye 相机。为了能够使用这台相机,我需要运行 ueyeusbdrc 服务。IDS 文档说要启动它,我可以运行sudo systemctl start ueyeusbdrcsudo /etc/init.d/ueyeusbdrc start. 问题是,当 docker 容器运行时,该服务没有运行并且我得到一个Failed to initialize camera错误,如果我运行gst-launch-1.0 -v idsueyesrc ! videoconvert ! autovideosink并且 ueyeusbdrc 服务没有在我的 PC 的容器之外运行,我得到的错误是相同的。所以这告诉我问题是 ueyeusbdrc 服务没有在容器内运行。

如何在 docker 容器内运行 ueyeusbdrc?我尝试/etc/init.d/ueyeusbdrc start在启动应用程序的 .sh 脚本中运行(ENTRYPOINT ["<.sh file>"]在 Dockerfile 中调用),但它失败了。此外,如果我尝试使用 sudo,它会告诉我该命令不存在。如果我运行 systemctl 它也会告诉我该命令不存在。顺便说一句,我正在运行privileged: truedocker(至少这是 docker-compose.yml 文件中设置的)。

我正在使用 Ubuntu 18.04。

更新:我将 /run/ueyed 和 /var/run/ueyed 映射到容器,并将错误从Failed to initialize camera更改为Failed to initialize video capture。可能是我可以在主机中运行守护程序,并且有一种方法可以将它挂接到容器。关于如何做到这一点的任何建议?

4

1 回答 1

3

终于得到了这个工作。我必须在 docker 命令中添加一些选项(在我的例子中是 docker-compose yml 文件)。我的解决方案基于此处的设置:https ://github.com/chalmers-revere/opendlv-device-camera-ueye

将这些参数添加到 docker 命令解决了这个问题--ipc=host --pid=host -v /var/run:/var/run:使用这些选项,无需在容器内运行服务。

另一个关键部分是在 docker 容器内安装 IDS 软件。这可以通过下载、解压和运行安装程序轻松完成(上面提到的 git repo 有一个过时的版本,但可以在 IDS 网页中找到最新版本)。

此外,请确保 IDS uEye 摄像头的系统服务正在主机中运行 ( sudo systemctl start ueyeusbdrc)。

于 2020-02-18T00:38:07.593 回答