我如何 运行 docker 容器内的服务使用 gstreamer 从 IDS uEye 相机获取数据?
How can I run a service inside a docker container to get feed from a IDS uEye camera using gstreamer?
我有一个 docker 容器,它使用 gstreamer 插件来捕获相机的输入。 运行用 Bastler 相机没问题,但现在我需要使用 IDS uEye 相机。为了能够使用这个相机,我需要有 ueyeusbdrc 服务 运行ning。 IDS 文档说要启动它,我可以 运行 sudo systemctl start ueyeusbdrc
或 sudo /etc/init.d/ueyeusbdrc start
。问题是,当 docker 容器 运行s 时,该服务不是 运行ning 并且我收到 Failed to initialize camera 错误,这如果我 运行 gst-launch-1.0 -v idsueyesrc ! videoconvert ! autovideosink
并且 ueyeusbdrc 服务没有 运行 在我的 PC 的容器外,我得到的是同样的错误。所以这告诉我问题是 ueyeusbdrc 服务不在容器内 运行ning。
如何运行 ueyeusbdrc 在docker 容器中?我尝试在启动应用程序的 .sh 脚本中 运行 /etc/init.d/ueyeusbdrc start
(在 Dockerfile 中使用 ENTRYPOINT ["<.sh file>"]
调用),但它失败了。此外,如果我尝试使用 sudo,它会告诉我该命令不存在。如果我 运行 systemctl 它也会告诉我该命令不存在。顺便说一句,我运行宁 docker 与 privileged: true
(至少这是在 docker-compose.yml 文件中设置的)。
我正在使用 Ubuntu 18.04.
更新:
我将 /run/ueyed 和 /var/run/ueyed 映射到容器,并将错误从 Failed to initialize camera 更改为 Failed to initialize video capture。可能是我可以 运行 主机中的守护进程,并且有一种方法可以将它挂接到容器。关于如何做到这一点有什么建议吗?
终于成功了。我必须向 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软件。这可以通过下载、解压和 运行ning 安装程序轻松完成(上面提到的 git repo 有一个过时的版本,但最新版本可以在 IDS 网页中找到)。
此外,请确保 IDS uEye 相机的系统服务在主机 (sudo systemctl start ueyeusbdrc
) 中 运行ning。
我有一个 docker 容器,它使用 gstreamer 插件来捕获相机的输入。 运行用 Bastler 相机没问题,但现在我需要使用 IDS uEye 相机。为了能够使用这个相机,我需要有 ueyeusbdrc 服务 运行ning。 IDS 文档说要启动它,我可以 运行 sudo systemctl start ueyeusbdrc
或 sudo /etc/init.d/ueyeusbdrc start
。问题是,当 docker 容器 运行s 时,该服务不是 运行ning 并且我收到 Failed to initialize camera 错误,这如果我 运行 gst-launch-1.0 -v idsueyesrc ! videoconvert ! autovideosink
并且 ueyeusbdrc 服务没有 运行 在我的 PC 的容器外,我得到的是同样的错误。所以这告诉我问题是 ueyeusbdrc 服务不在容器内 运行ning。
如何运行 ueyeusbdrc 在docker 容器中?我尝试在启动应用程序的 .sh 脚本中 运行 /etc/init.d/ueyeusbdrc start
(在 Dockerfile 中使用 ENTRYPOINT ["<.sh file>"]
调用),但它失败了。此外,如果我尝试使用 sudo,它会告诉我该命令不存在。如果我 运行 systemctl 它也会告诉我该命令不存在。顺便说一句,我运行宁 docker 与 privileged: true
(至少这是在 docker-compose.yml 文件中设置的)。
我正在使用 Ubuntu 18.04.
更新: 我将 /run/ueyed 和 /var/run/ueyed 映射到容器,并将错误从 Failed to initialize camera 更改为 Failed to initialize video capture。可能是我可以 运行 主机中的守护进程,并且有一种方法可以将它挂接到容器。关于如何做到这一点有什么建议吗?
终于成功了。我必须向 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软件。这可以通过下载、解压和 运行ning 安装程序轻松完成(上面提到的 git repo 有一个过时的版本,但最新版本可以在 IDS 网页中找到)。
此外,请确保 IDS uEye 相机的系统服务在主机 (sudo systemctl start ueyeusbdrc
) 中 运行ning。