Как запустить службу в контейнере docker для получения канала с камеры IDS uEye с помощью gstreamer? - PullRequest
1 голос
/ 12 февраля 2020

У меня есть контейнер docker, который использует плагин gstreamer для захвата ввода камеры. Он отлично работает с камерой Bastler, но теперь мне нужно использовать камеру IDS uEye. Чтобы использовать эту камеру, мне нужно запустить службу ueyeusbdr c. В документации IDS сказано, что для запуска я могу запустить sudo systemctl start ueyeusbdrc или sudo /etc/init.d/ueyeusbdrc start. Проблема заключается в том, что при запуске контейнера docker эта служба не работает, и я получаю ошибку Failed to initialize camera , что является той же ошибкой, которую я получаю, если запускаю gst-launch-1.0 -v idsueyesrc ! videoconvert ! autovideosink и ueyeusbdr * Служба 1023 * не работает вне контейнера в моем P C. Это говорит о том, что проблема в том, что служба ueyeusbdr c не работает внутри контейнера.

Как я могу запустить ueyeusbdr c внутри контейнера docker? Я попытался запустить /etc/init.d/ueyeusbdrc start в сценарии. sh, который запускает приложение (которое вызывается с помощью ENTRYPOINT ["<.sh file>"] в Dockerfile), но не удается. Также, если я пытаюсь использовать sudo, это говорит мне, что команда не существует. Если я запускаю systemctl, он также говорит мне, что команда не существует. Кстати, я запускаю docker с privileged: true (по крайней мере, это то, что установлено в файле docker -compose.yml).

Я использую Ubuntu 18.04.

Обновление: я сопоставил / run / ueyed и / var / run / ueyed с контейнером, и это изменило ошибку с Не удалось инициализировать камеру на Не удалось инициализировать захват видео . Возможно, я могу запустить демон на хосте, и есть способ подключить его к контейнеру. Любые предложения о том, как это сделать?

1 Ответ

1 голос
/ 18 февраля 2020

Наконец-то все заработало. Мне пришлось добавить несколько опций в команду 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 имеет устаревшую версию, но самую последнюю версию можно найти на веб-странице IDS).

Кроме того, сделайте убедитесь, что системная служба для камеры IDS uEye работает на хосте (sudo systemctl start ueyeusbdrc).

...