Docker Problem with libnvinfer.so.10

Dear Support Team

I’m currently experiencing issues with your Docker setup for ARM architectures (Jetson). I’m using the Dockerfile provided below, based on dustynv/ros:humble-ros-base-l4t-r36.3.0, and targeting JetPack 6.0.1 (L4T 36.4).

The ZED SDK (even from version 4.2 onward) requires libnvinfer.so.10, but the base image appears to reference TensorRT 8 by default. This causes runtime errors when the ZED SDK attempts to load its AI module, as TensorRT 10 is not properly linked or recognized.

Although I manually copy libnvinfer.so.10 into the container and run ldconfig, the SDK still fails to bind it correctly. Additionally, NVIDIA has not yet published an updated base image that natively supports TensorRT 10 for JetPack 6, which complicates things further.

Do you have any recommendations or workarounds for ensuring proper TensorRT 10 integration in this Docker environment? Is there a preferred base image or setup that supports ZED SDK 5.x and TensorRT 10 on Jetson with ROS 2 Humble?

I’ve attached the full Dockerfile below for reference.

Thank you in advance for your support.

Kind regards,

\# Define the L4T_VERSION argument
ARG L4T_VERSION=l4t-r36.4.0
ARG IMAGE_NAME=dustynv/ros:humble-ros-base-l4t-r36.3.0 

FROM ${IMAGE_NAME} 

\# ARG ZED_SDK_MAJOR=4
\# ARG ZED_SDK_MINOR=2
\# ARG ZED_SDK_PATCH=3
ARG ZED_SDK_MAJOR=5
ARG ZED_SDK_MINOR=1
ARG ZED_SDK_PATCH=0 

ARG L4T_MAJOR=36
ARG L4T_MINOR=4

\# Optional: Override ZED SDK URL
ARG CUSTOM_ZED_SDK_URL=""

\# ROS 2 distribution
ARG ROS2_DIST=humble 

\# ZED ROS2 Wrapper dependencies version
ARG XACRO_VERSION=2.0.8
ARG DIAGNOSTICS_VERSION=4.0.0
ARG AMENT_LINT_VERSION=0.12.11
ARG ROBOT_LOCALIZATION_VERSION=3.5.3
ARG ZED_MSGS_VERSION=5.0.0
ARG NMEA_MSGS_VERSION=2.0.0
ARG ANGLES_VERSION=1.15.0
ARG GEOGRAPHIC_INFO_VERSION=1.0.6
ARG POINTCLOUD_TRANSPORT_VERSION=1.0.18
ARG POINTCLOUD_TRANSPORT_PLUGINS_VERSION=1.0.11
ARG RMW_CYCLONEDDS_VERSION=1.3.4
ARG BACKWARD_ROS_VERSION=1.0.7
ENV PYPI_URL=https://pypi.jetson-ai-lab.io/jp6/cu126 

ENV DEBIAN_FRONTEND=noninteractive 

\# ZED SDK link
ENV ZED_SDK_URL=${CUSTOM_ZED_SDK_URL:-[https://download.stereolabs.com/zedsdk/${ZED_SDK_MAJOR}.${ZED_SDK_MINOR}.${ZED_SDK_PATCH}/l4t${L4T_MAJOR}.${L4T_MINOR}/jetsons](https://download.stereolabs.com/zedsdk/$%7bZED_SDK_MAJOR%7d.$%7bZED_SDK_MINOR%7d.$%7bZED_SDK_PATCH%7d/l4t$%7bL4T_MAJOR%7d.$%7bL4T_MINOR%7d/jetsons)} 

\# Check that this SDK exists
RUN if \[ "$(curl -L -I "${ZED_SDK_URL}" -o /dev/null -s -w '%{http_code}\\n' | head -n 1)" = "200" \]; then \\
        echo "The URL points to something."; \\
    else \\
        echo "The URL does not point to a .run file or the file does not exist."; \\
        exit 1; \\
    fi

RUN curl -fsSL [https://raw.githubusercontent.com/ros/rosdistro/master/ros.key](https://raw.githubusercontent.com/ros/rosdistro/master/ros.key) -o /usr/share/keyrings/ros-archive-keyring.gpg && \\
   apt-get update || true && apt-get install -y --no-install-recommends apt-utils dialog && \\
   rm -rf /var/lib/apt/lists/\* 

ENV TZ=Europe/Paris 

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \\
  apt-get update && \\
  apt-get install --yes lsb-release wget less udev sudo build-essential cmake python3 python3-dev python3-pip python3-wheel git jq libpq-dev zstd usbutils && \\   
  rm -rf /var/lib/apt/lists/\* 

RUN echo "# R${L4T_MAJOR} (release), REVISION: ${L4T_MINOR}" > /etc/nv_tegra_release && \\
  apt-get update -y || true && \\
  apt-get install -y --no-install-recommends zstd wget less cmake curl gnupg2 \\
  build-essential python3 python3-pip python3-dev python3-setuptools libusb-1.0-0-dev \\
  libgeographic-dev libdraco-dev zlib1g-dev -y && \\
  export PIP_INDEX_URL="${PYPI_URL}" && \\
  pip install protobuf && \\
  wget -q --no-check-certificate -O ZED_SDK_Linux_JP.run \\
  ${ZED_SDK_URL} && \\
  chmod +x ZED_SDK_Linux_JP.run ; ./ZED_SDK_Linux_JP.run silent skip_tools && \\
  rm -rf /usr/local/zed/resources/\* && \\
  rm -rf ZED_SDK_Linux_JP.run && \\
  rm -rf /var/lib/apt/lists/\* 

\# Install the ZED ROS2 Wrapper
ENV ROS_DISTRO=${ROS2_DIST} 

\# Copy the sources in the Docker image
WORKDIR /usr/local/zed/ros2_ws/src
#COPY tmp_sources/ ./ 

\# Install missing dependencies from the sources
WORKDIR /root/ros2_ws/src

RUN wget [https://github.com/ros/xacro/archive/refs/tags/${XACRO_VERSION}.tar.gz](https://github.com/ros/xacro/archive/refs/tags/$%7bXACRO_VERSION%7d.tar.gz) -O - | tar -xvz && mv xacro-${XACRO_VERSION} xacro && \\
    wget [https://github.com/ros/diagnostics/archive/refs/tags/${DIAGNOSTICS_VERSION}.tar.gz](https://github.com/ros/diagnostics/archive/refs/tags/$%7bDIAGNOSTICS_VERSION%7d.tar.gz) -O - | tar -xvz && mv diagnostics-${DIAGNOSTICS_VERSION} diagnostics && \\
    wget [https://github.com/ament/ament_lint/archive/refs/tags/${AMENT_LINT_VERSION}.tar.gz](https://github.com/ament/ament_lint/archive/refs/tags/$%7bAMENT_LINT_VERSION%7d.tar.gz) -O - | tar -xvz && mv ament_lint-${AMENT_LINT_VERSION} ament-lint && \\
    wget [https://github.com/cra-ros-pkg/robot_localization/archive/refs/tags/${ROBOT_LOCALIZATION_VERSION}.tar.gz](https://github.com/cra-ros-pkg/robot_localization/archive/refs/tags/$%7bROBOT_LOCALIZATION_VERSION%7d.tar.gz) -O - | tar -xvz && mv robot_localization-${ROBOT_LOCALIZATION_VERSION} robot-localization && \\
    wget [https://github.com/stereolabs/zed-ros2-interfaces/archive/refs/tags/${ZED_MSGS_VERSION}.tar.gz](https://github.com/stereolabs/zed-ros2-interfaces/archive/refs/tags/$%7bZED_MSGS_VERSION%7d.tar.gz) -O - | tar -xvz && mv zed-ros2-interfaces-${ZED_MSGS_VERSION} zed-ros2-interfaces && \\
    wget [https://github.com/ros-drivers/nmea_msgs/archive/refs/tags/${NMEA_MSGS_VERSION}.tar.gz](https://github.com/ros-drivers/nmea_msgs/archive/refs/tags/$%7bNMEA_MSGS_VERSION%7d.tar.gz) -O - | tar -xvz && mv nmea_msgs-${NMEA_MSGS_VERSION} nmea_msgs && \\
    wget [https://github.com/ros/angles/archive/refs/tags/${ANGLES_VERSION}.tar.gz](https://github.com/ros/angles/archive/refs/tags/$%7bANGLES_VERSION%7d.tar.gz) -O - | tar -xvz && mv angles-${ANGLES_VERSION} angles && \\
    #wget [https://github.com/ros-perception/point_cloud_transport/archive/refs/tags/${POINTCLOUD_TRANSPORT_VERSION}.tar.gz](https://github.com/ros-perception/point_cloud_transport/archive/refs/tags/$%7bPOINTCLOUD_TRANSPORT_VERSION%7d.tar.gz) -O - | tar -xvz && mv point_cloud_transport-${POINTCLOUD_TRANSPORT_VERSION} point_cloud_transport && \\
    #wget [https://github.com/ros-perception/point_cloud_transport_plugins/archive/refs/tags/${POINTCLOUD_TRANSPORT_PLUGINS_VERSION}.tar.gz](https://github.com/ros-perception/point_cloud_transport_plugins/archive/refs/tags/$%7bPOINTCLOUD_TRANSPORT_PLUGINS_VERSION%7d.tar.gz) -O - | tar -xvz && mv point_cloud_transport_plugins-${POINTCLOUD_TRANSPORT_PLUGINS_VERSION} point_cloud_transport_plugins && \\
    wget [https://github.com/ros2/rmw_cyclonedds/archive/refs/tags/${RMW_CYCLONEDDS_VERSION}.tar.gz](https://github.com/ros2/rmw_cyclonedds/archive/refs/tags/$%7bRMW_CYCLONEDDS_VERSION%7d.tar.gz) -O - | tar -xvz && mv rmw_cyclonedds-${RMW_CYCLONEDDS_VERSION} rmw_cyclonedds && \\
    wget [https://github.com/ros-geographic-info/geographic_info/archive/refs/tags/${GEOGRAPHIC_INFO_VERSION}.tar.gz](https://github.com/ros-geographic-info/geographic_info/archive/refs/tags/$%7bGEOGRAPHIC_INFO_VERSION%7d.tar.gz) -O - | tar -xvz && mv geographic_info-${GEOGRAPHIC_INFO_VERSION} geographic-info && \\
    wget [https://github.com/pal-robotics/backward_ros/archive/refs/tags/${BACKWARD_ROS_VERSION}.tar.gz](https://github.com/pal-robotics/backward_ros/archive/refs/tags/$%7bBACKWARD_ROS_VERSION%7d.tar.gz) -O - | tar -xvz && mv backward_ros-${BACKWARD_ROS_VERSION} backward_ros && \\
    cp -r geographic-info/geographic_msgs/ . && \\
    rm -rf geographic-info   

\# Install cython
#RUN python3 -m pip install --upgrade cython 

\# Build the dependencies and the ZED ROS2 Wrapper
WORKDIR /usr/local/zed/ros2_ws

RUN /bin/bash -c "source /opt/ros/$ROS_DISTRO/install/setup.bash && \\
  colcon build --parallel-workers $(nproc) --symlink-install \\
  --event-handlers console_direct+ --base-paths src \\
  --cmake-args ' -DCMAKE_BUILD_TYPE=Release' \\
  ' -DCMAKE_LIBRARY_PATH=/usr/local/cuda/lib64/stubs' \\
  ' -DCMAKE_CXX_FLAGS="-Wl,--allow-shlib-undefined"' \\
  ' --no-warn-unused-cli' " 

WORKDIR /usr/local/zed

\# Setup environment variables
COPY ros_entrypoint_jetson.sh ros_entrypoint_jetson.sh
RUN sudo chmod 755 ros_entrypoint_jetson.sh 

ENTRYPOINT \["ros_entrypoint_jetson.sh"\]
CMD \["bash"\]

Hi @becketps
Welcome to the Stereolabs community.

Please copy and paste also the error message that you receive.

I had to reflash the jetson. The message was that this file only does not exist.

Hi @becketps

The ZED SDK on Jetson is linked to the default available TensorRT version shipped with the Jetpack/L4T. So none of the Jetson ZED SDK installers are linked to TensorRT 10 (except the newer Thor/JetPack 7), they’re all linked to TensorRT 8.X.

You can check with ldd on sl_ai library

ldd /usr/local/zed/lib/libsl_ai.so | grep nvinfer

Also make sure the ZED SDK installer matches your L4T version (there’s a message if it mismatches)

Thanks for the reply.

I have Jetpack 36.4.4 on my system and there the Version of TensorRT was predefined as RensorRT10

Nvidia has increased the TensorRT version scince the Version 36.4.3 I googled.

For your reference: Which is Tensorrt edition for L4T 36.4 - #6 by 277816011 - Jetson Orin Nano - NVIDIA Developer Forums

how can I fix this?

jetson@ubuntu:/usr/local/zed/tools$ ldd /usr/local/zed/lib/libsl_ai.so | grep nvinfer
libnvinfer.so.10 => /lib/aarch64-linux-gnu/libnvinfer.so.10 (0x0000ffff7a230000)
libnvinfer_plugin.so.10 => /lib/aarch64-linux-gnu/libnvinfer_plugin.so.10 (0x0000ffff79030000)
jetson@ubuntu:/usr/local/

Was my output.

Is that the reason why also in the isaac Ros the ros Topics doesn’t work in the container?

I see the Explorer and depth view but when I normally start the ros2 node like it is written there and do ros2 topic echo

no data is comming out.

You’re right I apologize for the oversight.

In your case you should not mixed L4T version I think

ARG L4T_VERSION=l4t-r36.4.0
ARG IMAGE_NAME=dustynv/ros:humble-ros-base-l4t-r36.3.0

FROM ${IMAGE_NAME}

ARG L4T_MAJOR=36
ARG L4T_MINOR=4

You should probably use 36.3 everywhere if this is your base image

In your description it says to download and build the folder

I only want to continue this example here with running and more important getting data in the container on the jetson.

Isaac Ros ZED Tutorial

There is the standard in the aarch64 base image

ARG PLATFORM=amd64

ARG BASE_IMAGE=nvidia/cuda:12.6.1-devel-ubuntu22.04

Do I have to change this? Then the Dockerfiles I think are not valid anymore