我如何在docker容器中运行服务,以使用gstreamer从IDS uEye摄像机获取提要?

问题描述 投票:1回答:1

我有一个使用gstreamer插件来捕获摄像机输入的docker容器。使用Bastler相机可以正常运行,但是现在我需要使用IDS uEye相机。为了能够使用此相机,我需要运行ueyeusbdrc服务。 IDS文档说,要启动它,我可以运行sudo systemctl start ueyeusbdrcsudo /etc/init.d/ueyeusbdrc start。问题是,当docker容器运行时,该服务未运行,并且出现无法初始化相机错误,这与在运行gst-launch-1.0 -v idsueyesrc ! videoconvert ! autovideosink并且ueyeusbdrc服务未在外部运行时遇到的错误相同我PC中的容器。因此,这告诉我问题是ueyeusbdrc服务未在容器内运行。

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

我正在使用Ubuntu 18.04。

更新:我将/ run / ueyed和/ var / run / ueyed映射到容器,并将错误从无法初始化摄像机更改为未能初始化视频捕获。可能是我可以在主机中运行守护程序,并且有一种方法可以将其挂接到容器。关于如何做到这一点的任何建议?

docker docker-compose gstreamer init.d systemctl
1个回答
0
投票

最后终于成功了。我必须在docker命令中添加一些选项(在本例中,是在docker-compose yml文件中)。我的解决方案基于此处的设置:https://github.com/chalmers-revere/opendlv-device-camera-ueye

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

另一个关键部分是将IDS软件安装在Docker容器内。可以通过下载,解压缩并运行安装程序来轻松完成此操作(上述git repo具有过时的版本,但是最新版本可以在IDS网页上找到)。

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

© www.soinside.com 2019 - 2024. All rights reserved.