General Information
- Products: N46-1202-BL, N35-802-16-BL
- Ensenso SDK Version: 3.5.1419
- Operating System: debian / docker
Problem / Question
We have a java application which is using the Ensenso camera via a JNA wrapper for the nxLib. Now we want the application running in a docker container. For this we mounted the libNxLib64.so into the docker container. NxView is installed on the server which is running the container. NxView has access to the camera. The java application finds the mounted nxLib but fails to get any (json) information from the library. Content is null.
I noticed from another thread that you guys are using docker as well. What would be the proper way to get access to the cameras from the container in an installation like ours? Do we have to install Ensenso sdk in the container as well?
Hi,
what part of the tree are you trying to read that is null?
If you are searching for cameras in the /Cameras
list and there are no cameras, you might have to run your Docker container with --network=host
. The cameras are discovered in the network using UDP broadcasts, which doesn’t work in Docker’s default network.
I managed to debug into the startup and use NxTreeEdit on the port my application is using. The application started in the docker container doesn’t find the N35 camera (also not the Ui52xx color camera and the virtual camera). But the N46 and a Basler ace camera appear in the list.
The reason for this is likely that I didn’t install the ueye driver in the docker container.
The application started in the docker container doesn’t find the N35 camera
Correct, this camera needs a uEye driver in the container. Unfortunately I don’t know if this has ever been tried. If you get it running it would be nice if you could post the necessary steps here.
Newer camera models using the GigE Vision protocol only need the NxLib and the network settings as described above.
also not the virtual camera
You can use virtual cameras in the container, but you have to create them in the container. The configuration of virtual cameras is saved in $ENSENSO_INSTALL/settings/NxLib/virtual_cameras.json
, so you could also mount this file into the container to share virtual cameras between the installations.
Currently I fail to install the uEye debian driver but it is not a docker specific issue as far as I can see. There are dependency issues:
pre-dependency problem: ueye-demos pre-depends on ueye-common … ueye-common is unpacked, but has never been configured.
..and configuration issues:
System has not been booted with systemd as init system (PID 1). Can't operate.
/ Failed to connect to bus: Host is down
ln: failed to create symbolic link ‘/usr/bin/ueyemakeconfig’: File exists
I tried to install the 4.96.1 uEye debian package with:
dpkg --install --recursive /tmp/ids_ueye_install/ || true && apt install -f -y && dpkg --configure -a || true && apt install -f -y:
Previously unpacked the tar file with:
tar -xzf /tmp/ids-software-suite-linux-64-4.96.1-debian.tgz -C /tmp/ids_ueye_install/
Maybe @ids-ensenso, @u.seitz or @n.rein can help here?
Hi Dennis,
The integration of our uEye cameras into Docker containers is not officially supported by IDS.
However, there is an unofficial guide that has already received positive feedback from some of our customers. Please finde the unofficial guide in the attachment.
Best, Niko
uEye_docker.zip (74.2 KB)
Thanks for the scripts. I had to modify them though. I had to mount the ueyeethd.conf into the container instead of generating it with the script. Now I’ve got the docker container running under Debian. However I need to transfer the container to a RedHat (RHEL) server. There I again have the issue that the cameras are not visible from inside the container. The problem is probably that the ueyeethd daemon is not running correctly on the RHEL server:
The uEye GigE daemon (ueyeethd
) is running successfully on the RHEL host (confirmed via systemctl status
and journalctl
showing camera detection and “Driver loaded!”), but it does not open any network sockets (confirmed via netstat -tulnp | grep ueyeethd
returning no output). Consequently, the “ueyesetid” application running within a Podman container (using “–net=host --cap-add ALL --privileged” and explicitly configured ForceGigEIP
to the host’s NIC IP) cannot see the cameras.
I need guidance on why the daemon isn’t opening network sockets under these conditions. It would probably help to get more feedback from ueyeethd. Is there a higher verbosity level that can be configured?