Estoy intentando ejecutar uv4l dentro de un contenedor Docker. Esta es una breve descripción del proyecto u4vl:

Controladores de espacio de usuario multiplataforma para dispositivos de entrada y salida de video real o virtual (sin absolutamente ninguna diferencia externa con los controladores del kernel) y otros back-end o front-end conectables.

Entonces, dentro del contenedor de la ventana acoplable, u4vl intentará registrar un controlador de espacio de usuario. En mi caso, exponiendo la cámara Raspberry Pi como /dev/video0.

Cuando ejecuto el comando:

uv4l --auto-video_nr --driver raspicam --width 1080 --height 720 --encoding mjpeg --server-option '--port=9000'

Recibo un mensaje que dice <notice> [core] Registering device node /dev/video0, pero cuando intento hacer ls /dev no hay dispositivo /dev/video0.

Ejecuto el contenedor en modo privilegiado usando la bandera --privileged en el comando docker run.

¿Hay algo más que deba hacer dentro del contenedor para "permitir" que cree un controlador de espacio de usuario y un nuevo dispositivo?

De ninguna manera soy un experto en Linux, así que perdóneme si mi terminología / comprensión está un poco mal.

1
Jonas Follesø 13 dic. 2016 a las 13:04

2 respuestas

La mejor respuesta

Solo estoy trabajando en eso y lo hago funcionar con un Ricoh Theta ejecutando

docker run -it --device=/dev/bus/usb/`lsusb | grep Ricoh|awk {'print $2'}`/`lsusb | grep Ricoh|awk {'print $4'}|sed 's/:$//'` -p 8080:8080 --cap-add=ALL --privileged -v /lib/modules:/lib/modules -v=/dev:/dev -e UV4L_PARAMETERS="-k -f --sched-rr --mem-lock --driver uvc --device-id 05ca:2711 --auto-video_nr" daniego/rover-uv4l

Probablemente solo necesite mapear el dispositivo. Trabajaré en el raspicam el próximo mes, pero probablemente puedas encontrar una manera de hacerlo funcionar echando un vistazo a mi trabajo https://github.com/daniego/rover-uv4l y https://hub.docker.com/r/daniego/rover-uv4l/

1
Daniel Floris 15 may. 2017 a las 23:01

¿Está ejecutando este comando dentro o fuera del contenedor? Ejecutar el contenedor en modo --privileged solo expone los nodos del dispositivo host dentro del contenedor, no puede haber nuevos dentro. Si ejecuta el comando en el exterior, luego ejecute el contenedor con la bandera, debería poder ver el nuevo nodo del dispositivo.

1
yelsayed 13 dic. 2016 a las 10:24