docker - 如何在 docker 容器内运行服务以使用 gstreamer 从 IDS uEye 摄像头获取源?

标签 docker gstreamer systemctl init.d ueye

我有一个 Docker 容器,它使用 gstreamer 插件来捕获相机的输入。它与 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?我尝试运行/etc/init.d/ueyeusbdrc start在启动应用程序的 .sh 脚本中(在 Dockerfile 中使用 ENTRYPOINT ["<.sh file>"] 调用),但失败了。另外,如果我尝试使用 sudo,它会告诉我该命令不存在。如果我运行 systemctl 它也会告诉我该命令不存在。顺便说一句,我正在运行 docker privileged: true (至少 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)。

关于docker - 如何在 docker 容器内运行服务以使用 gstreamer 从 IDS uEye 摄像头获取源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60195652/

相关文章:

tomcat - docker容器中是否可以更改日期?

c++ - QAudioDecoder "GStreamer; Unable to start decoding process"

docker - 如何将 RBAC 权限分配给系统 :anonymous service account in Kubernetes?

go - 如何在 docker registry api 中为带有标签的图像名称创建 map[string][]string?

postgresql - 从主机连接到 docker 容器中的 postgres

python - 随时随地向 GStreamer 管道添加和删除音频源

windows - Gstreamer : gst_element_factory_make() : always fail and return NULL : Qt5

python - 如何从 systemctl status 的输出中获取单个值

linux - Android 平台工具 : "A stop job is running for Session 2 of UserX",,我必须等待 90 秒才能断电