我有一个docker容器,它使用gstreamer插件来捕获相机的输入。它与Bastler相机配合使用运行良好,但现在我需要使用IDS uEye相机。为了能够使用此相机,我需要运行ueyeusbdrc服务。IDS文档说要启动它,我可以运行sudo systemctl start ueyeusbdrc
或sudo /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 yml 文件(。我的解决方案基于此处的设置:https://github.com/chalmers-revere/opendlv-device-camera-ueye
将这些参数添加到 docker 命令中解决了以下问题:--ipc=host --pid=host -v /var/run:/var/run
.使用这些选项,无需在容器内运行服务。
另一个关键部分是在 docker 容器内安装 IDS 软件。这可以通过下载、提取和运行安装程序轻松完成(上面提到的 git 存储库有一个过时的版本,但最新版本可以在 IDS 网页中找到(。
此外,请确保 IDS uEye 相机的系统服务在主机中运行 (sudo systemctl start ueyeusbdrc
(。