Debian Containers for Torizon
Introduction
Toradex provides a set of lightweight, Debian-based Docker container images for Torizon, derived from the Debian Slim Image variant of Debian 12 Bookworm. These containers serve as foundations for application development on Torizon, offering a hierarchy of images with minimal installed packages and disabled manual pages.
While you can use any container, Toradex's containers simplify tasks such as:
- Running graphical applications.
- Accessing specific hardware features like GPU and VPU.
- Utilizing maintained images tested for specific modules.
- Operating without running as root by default.
The container offerings include:
- Console-only base container.
- Container with a modern Wayland-based Weston compositor.
- Qt-Wayland-based container supporting common Qt backends like Wayland and EGLFS.
- Chromium and Cog-based containers for displaying web content and single-page applications.
- .NET Containers for both Console and GUI applications.
- Containers containing Cross-Compilers.
- Containers to test products during the hardware bring-up phase.
Each container builds upon the previous one, adding more features to closely match the minimal dependencies of various applications. Being Debian-based, they allow further package installation using the apt command as required by user applications. The container images are freely available on Docker Hub. These containers are also used as a base when using the templates from the Torizon IDE extension.
This article complies with the Typographic Conventions for Torizon Documentation.
Platform-Specific Torizon Debian Containers
Toradex supports variations of the same container images for each of the SoC families present in the Toradex portfolio. This is due to the specific userspace libraries needed to properly use the vendor-maintained kernels.
Each SoC-specific container has the SoC family name in the container name, following the <container-registry-user>/<container-name>-<soc-platform-name>:<tag> format. For example, the container responsible for the Wayland-based Weston compositor for the AM62 SoC for the major 4 release is torizon/weston-am62:4. Another example is the console-only base Debian image for the i.MX 8 platform, named torizon/debian-imx8:4.
Additionally, Toradex provides containers that don't have a platform specifier appended to the image names (using the previous example, this image would be just torizon/weston). These images are used when the upstream kernel is selected to be shipped with Torizon OS (for the i.MX 6 and i.MX 7 families, for example).
Each SoC-specific container family has a custom Debian package feed maintained by Toradex, with the packages themselves being attested from Toradex GitHub builds under the torizon organization.
Note that the same packages might have different versions across platforms. For example, on Torizon OS 7, Toradex ships Weston 12 for i.MX 8 devices while shipping Weston 10 for the i.MX 6 and i.MX 7. In general, the strategy is to cover the Toradex test suite and not break use cases during a major release. For platforms that heavily rely on non-upstreamed forks such as iMX8, the strategy is to ship the same versions of key userspace applications that one would get if using Yocto. There is no list of these 'key' applications, but in general, these are applications that require special code to use hardware-specific features, such as GPU acceleration, such as Weston, OpenCV, Chromium, etc.
Differences from Upstream Debian Images
The Toradex feed has a higher priority than the upstream Debian repositories, so apt installs the Toradex-validated packages instead of the upstream versions.
You can also use upstream Debian images on Torizon OS. If you do, consider the following differences:
- Package versions might differ from the ones shipped in the Debian Containers for Torizon.
- Hardware-specific optimizations, such as GPU acceleration, might not be available.
Container Version Matrix
A list of all the currently supported platforms and each container for a given platform follows:
- i.MX 95
- i.MX 93
- i.MX 8
- AM69
- AM62P
- AM62
- Upstream
- SL1680
- NVIDIA Jetson Orin
- NVIDIA Jetson Thor
| Name | Tag |
|---|---|
| aspdotnet10-imx95 | 4 |
| aspdotnet8-imx95 | 4 |
| chromium-imx95 | 4 |
| cog-imx95 | 4 |
| cross-toolchain-arm64-imx95 | 4 |
| cross-toolchain-ssh-arm64-imx95 | 4 |
| debian-imx95 | 4 |
| dotnet10-gtk3-imx95 | 4 |
| dotnet10-imx95 | 4 |
| dotnet10-wayland-imx95 | 4 |
| dotnet8-gtk3-imx95 | 4 |
| dotnet8-imx95 | 4 |
| dotnet8-wayland-imx95 | 4 |
| graphics-tests-imx95 | 4 |
| qt5-wayland-examples-imx95 | 4 |
| qt5-wayland-imx95 | 4 |
| qt6-wayland-examples-imx95 | 4 |
| qt6-wayland-imx95 | 4 |
| qt6-wayland-tests-imx95 | 4 |
| tensorflow-lite-dev-imx95 | 4 |
| tensorflow-lite-examples-imx95 | 4 |
| tensorflow-lite-imx95 | 4 |
| wayland-base-dev-imx95 | 4 |
| wayland-base-imx95 | 4 |
| wayland-gtk3-imx95 | 4 |
| weston-imx95 | 4 |
| weston-touch-calibrator-imx95 | 4 |
| Name | Tag |
|---|---|
| aspdotnet10-imx93 | 4 |
| aspdotnet8-imx93 | 4 |
| chromium-imx93 | 4 |
| cog-imx93 | 4 |
| cross-toolchain-arm64-imx93 | 4 |
| cross-toolchain-ssh-arm64-imx93 | 4 |
| debian-imx93 | 4 |
| dotnet10-gtk3-imx93 | 4 |
| dotnet10-imx93 | 4 |
| dotnet10-wayland-imx93 | 4 |
| dotnet8-gtk3-imx93 | 4 |
| dotnet8-imx93 | 4 |
| dotnet8-wayland-imx93 | 4 |
| graphics-tests-imx93 | 4 |
| qt5-wayland-examples-imx93 | 4 |
| qt5-wayland-imx93 | 4 |
| qt6-wayland-examples-imx93 | 4 |
| qt6-wayland-imx93 | 4 |
| qt6-wayland-tests-imx93 | 4 |
| tensorflow-lite-dev-imx93 | 4 |
| tensorflow-lite-examples-imx93 | 4 |
| tensorflow-lite-imx93 | 4 |
| wayland-base-dev-imx93 | 4 |
| wayland-base-imx93 | 4 |
| wayland-gtk3-imx93 | 4 |
| weston-imx93 | 4 |
| weston-touch-calibrator-imx93 | 4 |
| Name | Tag |
|---|---|
| aspdotnet10-imx8 | 4 |
| aspdotnet8-imx8 | 4 |
| chromium-imx8 | 4 |
| cog-imx8 | 4 |
| crank-weston-imx8 | 4 |
| cross-toolchain-arm64-imx8 | 4 |
| cross-toolchain-ssh-arm64-imx8 | 4 |
| debian-imx8 | 4 |
| dotnet10-gtk3-imx8 | 4 |
| dotnet10-imx8 | 4 |
| dotnet10-wayland-imx8 | 4 |
| dotnet8-gtk3-imx8 | 4 |
| dotnet8-imx8 | 4 |
| dotnet8-wayland-imx8 | 4 |
| graphics-tests-imx8 | 4 |
| gstreamer1.0-dev-imx8 | 4 |
| gstreamer1.0-examples-imx8 | 4 |
| gstreamer1.0-imx8 | 4 |
| qt5-wayland-examples-imx8 | 4 |
| qt5-wayland-imx8 | 4 |
| qt6-enterprise-demo-imx8 | 4 |
| qt6-wayland-examples-imx8 | 4 |
| qt6-wayland-imx8 | 4 |
| qt6-wayland-tests-imx8 | 4 |
| tensorflow-lite-dev-imx8 | 4 |
| tensorflow-lite-examples-imx8 | 4 |
| tensorflow-lite-imx8 | 4 |
| wayland-base-dev-imx8 | 4 |
| wayland-base-imx8 | 4 |
| wayland-gtk3-imx8 | 4 |
| weston-imx8 | 4 |
| weston-touch-calibrator-imx8 | 4 |
| Name | Tag |
|---|---|
| aspdotnet10-am69 | 4 |
| aspdotnet8-am69 | 4 |
| chromium-am69 | 4 |
| cog-am69 | 4 |
| cross-toolchain-arm64-am69 | 4 |
| cross-toolchain-ssh-arm64-am69 | 4 |
| debian-am69 | 4 |
| dotnet10-am69 | 4 |
| dotnet10-gtk3-am69 | 4 |
| dotnet10-wayland-am69 | 4 |
| dotnet8-am69 | 4 |
| dotnet8-gtk3-am69 | 4 |
| dotnet8-wayland-am69 | 4 |
| graphics-tests-am69 | 4 |
| qt5-wayland-am69 | 4 |
| qt5-wayland-examples-am69 | 4 |
| qt6-wayland-am69 | 4 |
| qt6-wayland-examples-am69 | 4 |
| qt6-wayland-tests-am69 | 4 |
| wayland-base-am69 | 4 |
| wayland-base-dev-am69 | 4 |
| wayland-gtk3-am69 | 4 |
| weston-am69 | 4 |
| weston-touch-calibrator-am69 | 4 |
| Name | Tag |
|---|---|
| aspdotnet10-am62p | 4 |
| aspdotnet8-am62p | 4 |
| chromium-am62p | 4 |
| cog-am62p | 4 |
| cross-toolchain-arm64-am62p | 4 |
| cross-toolchain-ssh-arm64-am62p | 4 |
| debian-am62p | 4 |
| dotnet10-am62p | 4 |
| dotnet10-gtk3-am62p | 4 |
| dotnet10-wayland-am62p | 4 |
| dotnet8-am62p | 4 |
| dotnet8-gtk3-am62p | 4 |
| dotnet8-wayland-am62p | 4 |
| graphics-tests-am62p | 4 |
| qt5-wayland-am62p | 4 |
| qt5-wayland-examples-am62p | 4 |
| qt6-wayland-am62p | 4 |
| qt6-wayland-examples-am62p | 4 |
| qt6-wayland-tests-am62p | 4 |
| wayland-base-am62p | 4 |
| wayland-base-dev-am62p | 4 |
| wayland-gtk3-am62p | 4 |
| weston-am62p | 4 |
| weston-touch-calibrator-am62p | 4 |
| Name | Tag |
|---|---|
| aspdotnet10-am62 | 4 |
| aspdotnet8-am62 | 4 |
| chromium-am62 | 4 |
| cog-am62 | 4 |
| crank-weston-am62 | 4 |
| cross-toolchain-arm64-am62 | 4 |
| cross-toolchain-ssh-arm64-am62 | 4 |
| debian-am62 | 4 |
| dotnet10-am62 | 4 |
| dotnet10-gtk3-am62 | 4 |
| dotnet10-wayland-am62 | 4 |
| dotnet8-am62 | 4 |
| dotnet8-gtk3-am62 | 4 |
| dotnet8-wayland-am62 | 4 |
| graphics-tests-am62 | 4 |
| qt5-wayland-am62 | 4 |
| qt5-wayland-examples-am62 | 4 |
| qt6-wayland-am62 | 4 |
| qt6-wayland-examples-am62 | 4 |
| qt6-wayland-tests-am62 | 4 |
| wayland-base-am62 | 4 |
| wayland-base-dev-am62 | 4 |
| wayland-gtk3-am62 | 4 |
| weston-am62 | 4 |
| weston-touch-calibrator-am62 | 4 |
| Name | Tag |
|---|---|
| aspdotnet10 | 4 |
| aspdotnet8 | 4 |
| chromium | 4 |
| cog | 4 |
| crank-weston | 4 |
| cross-toolchain-amd64 | 4 |
| cross-toolchain-arm | 4 |
| cross-toolchain-arm64 | 4 |
| cross-toolchain-ssh-amd64 | 4 |
| cross-toolchain-ssh-arm | 4 |
| cross-toolchain-ssh-arm64 | 4 |
| debian | 4 |
| dotnet10 | 4 |
| dotnet10-debug | 4 |
| dotnet10-gtk3 | 4 |
| dotnet10-wayland | 4 |
| dotnet8 | 4 |
| dotnet8-debug | 4 |
| dotnet8-gtk3 | 4 |
| dotnet8-wayland | 4 |
| graphics-tests | 4 |
| qt5-wayland | 4 |
| qt5-wayland-examples | 4 |
| qt6-wayland | 4 |
| qt6-wayland-examples | 4 |
| qt6-wayland-tests | 4 |
| rt-tests | 4 |
| stress-tests | 4 |
| wayland-base | 4 |
| wayland-base-dev | 4 |
| wayland-gtk3 | 4 |
| weston | 4 |
| weston-touch-calibrator | 4 |
| Name | Tag |
|---|---|
| aspdotnet10-sl1680 | 4 |
| aspdotnet8-sl1680 | 4 |
| chromium-sl1680 | 4 |
| cog-sl1680 | 4 |
| cross-toolchain-arm64-sl1680 | 4 |
| cross-toolchain-ssh-arm64-sl1680 | 4 |
| debian-sl1680 | 4 |
| dotnet10-gtk3-sl1680 | 4 |
| dotnet10-sl1680 | 4 |
| dotnet10-wayland-sl1680 | 4 |
| dotnet8-gtk3-sl1680 | 4 |
| dotnet8-sl1680 | 4 |
| dotnet8-wayland-sl1680 | 4 |
| graphics-tests-sl1680 | 4 |
| qt5-wayland-examples-sl1680 | 4 |
| qt5-wayland-sl1680 | 4 |
| qt6-wayland-examples-sl1680 | 4 |
| qt6-wayland-sl1680 | 4 |
| qt6-wayland-tests-sl1680 | 4 |
| tensorflow-lite-dev-sl1680 | 4 |
| tensorflow-lite-examples-sl1680 | 4 |
| tensorflow-lite-sl1680 | 4 |
| wayland-base-dev-sl1680 | 4 |
| wayland-base-sl1680 | 4 |
| wayland-gtk3-sl1680 | 4 |
| weston-sl1680 | 4 |
| weston-touch-calibrator-sl1680 | 4 |
These containers are release candidates and require a Torizon OS image with NVIDIA JetPack. The wrynose-rc tag will change once a stable release becomes available.
| Name | Tag |
|---|---|
| aspdotnet10-orin | wrynose-rc |
| aspdotnet8-orin | wrynose-rc |
| chromium-orin | wrynose-rc |
| core-orin | wrynose-rc |
| cross-toolchain-arm64-orin | wrynose-rc |
| cross-toolchain-ssh-arm64-orin | wrynose-rc |
| cuda-orin | wrynose-rc |
| debian-orin | wrynose-rc |
| dotnet10-gtk3-orin | wrynose-rc |
| dotnet10-orin | wrynose-rc |
| dotnet10-wayland-orin | wrynose-rc |
| dotnet8-gtk3-orin | wrynose-rc |
| dotnet8-orin | wrynose-rc |
| dotnet8-wayland-orin | wrynose-rc |
| graphics-tests-orin | wrynose-rc |
| gstreamer1.0-orin | wrynose-rc |
| qt5-wayland-examples-orin | wrynose-rc |
| qt5-wayland-orin | wrynose-rc |
| qt6-wayland-examples-orin | wrynose-rc |
| qt6-wayland-orin | wrynose-rc |
| qt6-wayland-tests-orin | wrynose-rc |
| wayland-base-dev-orin | wrynose-rc |
| wayland-base-orin | wrynose-rc |
| wayland-gtk3-orin | wrynose-rc |
| weston-orin | wrynose-rc |
| weston-touch-calibrator-orin | wrynose-rc |
These containers are release candidates and require a Torizon OS image with NVIDIA JetPack. The wrynose-rc tag will change once a stable release becomes available.
| Name | Tag |
|---|---|
| aspdotnet10-thor | wrynose-rc |
| aspdotnet8-thor | wrynose-rc |
| chromium-thor | wrynose-rc |
| core-thor | wrynose-rc |
| cross-toolchain-arm64-thor | wrynose-rc |
| cross-toolchain-ssh-arm64-thor | wrynose-rc |
| cuda-thor | wrynose-rc |
| debian-thor | wrynose-rc |
| dotnet10-gtk3-thor | wrynose-rc |
| dotnet10-thor | wrynose-rc |
| dotnet10-wayland-thor | wrynose-rc |
| dotnet8-gtk3-thor | wrynose-rc |
| dotnet8-thor | wrynose-rc |
| dotnet8-wayland-thor | wrynose-rc |
| graphics-tests-thor | wrynose-rc |
| gstreamer1.0-thor | wrynose-rc |
| qt5-wayland-examples-thor | wrynose-rc |
| qt5-wayland-thor | wrynose-rc |
| qt6-wayland-examples-thor | wrynose-rc |
| qt6-wayland-tests-thor | wrynose-rc |
| qt6-wayland-thor | wrynose-rc |
| wayland-base-dev-thor | wrynose-rc |
| wayland-base-thor | wrynose-rc |
| wayland-gtk3-thor | wrynose-rc |
| weston-thor | wrynose-rc |
| weston-touch-calibrator-thor | wrynose-rc |
Tag 3 Containers
- AM62
- Upstream
| Name |
|---|
| chromium-am62 |
| cog-am62 |
| debian-am62 |
| graphics-tests-am62 |
| qt5-wayland-am62 |
| qt5-wayland-examples-am62 |
| qt6-wayland-am62 |
| qt6-wayland-examples-am62 |
| wayland-base-am62 |
| weston-am62 |
| Name |
|---|
| chromium |
| cog |
| debian |
| graphics-tests |
| qt5-wayland |
| qt5-wayland-examples |
| qt6-wayland |
| qt6-wayland-examples |
| rt-tests |
| stress-tests |
| wayland-base |
| weston |
| weston-touch-calibrator |
Tag 2 Containers
- Upstream
| Name |
|---|
| chromium |
| cog |
| graphics-tests |
| qt5-wayland |
| qt5-wayland-examples |
| rt-tests |
| stress-tests |
| wayland-base |
| weston |
| weston-touch-calibrator |
Tag 1 Containers
- Upstream
| Name |
|---|
| qt5-wayland |
| qt5-wayland-examples |
| wayland-base |
| weston |
| weston-touch-calibrator |
Tags and Versioning
Toradex Debian container images use semantic versioning for releases and are tagged accordingly. Notably, Toradex avoids using the latest tag, which is the default tag when pulling an image without tags. Instead, Toradex recommends users use the CT_TAGS environment variables that are available in all Torizon OS deployments. To learn more, read the dedicated article Torizon OS Containers Tags and Versioning.
Each Torizon OS major version uses a specific container major tag, such as torizon/debian-imx8:4 for Torizon OS 7. To check the major tag for each Torizon OS version, see Debian Release Mapping. Toradex neither guarantees nor tests that images built for Torizon OS 7 are compatible with Torizon OS 6.
Debian Release Mapping
Each Torizon major version is paired with a specific Debian stable release. Toradex moves the Debian Containers for Torizon to a new Debian major release only together with a new Torizon major release.
The following table lists the Debian release for each Torizon major version:
| Torizon OS Version | Debian Release | Container Major Tag |
|---|---|---|
| Torizon OS 7 | Debian 12 Bookworm | 4 |
| Torizon OS 6 | Debian 12 Bookworm | 3 |
| Torizon OS 5 | Debian 11 Bullseye | 2 |
Platform Architecture
In contrast with previous versions of Torizon Debian, images are built for the specific architecture of the SoC family (for example, the i.MX 8 family only contains 64-bit cores, so all images for those particular devices are only built for the arm64 instruction set architecture) with the exception of the upstream images (those images that do not contain a SoC specifier), which are built for arm64, armv7 and amd64 architectures.
When pulling an image, the architecture choice matches the host's, although it is possible to specify the intended architecture by passing the --platform argument. Similarly, when building on top of Torizon images, docker build --pull --platform=<IMAGE_ARCH> ... can be used to specify the build architecture.
For example, if you want to pull an image for the 32-bit armv7 architecture, use the following command:
$ docker pull --platform=linux/arm/v7 <image-name>
For arm64v8, use:
$ docker pull --platform=linux/arm64/v8 <image-name>
Details about Toradex Images
This section gives more details about Toradex Debian-based images and how they can improve the development process.
Two points from the Toradex base image (which are carried through to the other images that inherit from it) are worth highlighting. For this, please take a look at the upstream variant base Dockerfile hosted on GitHub.
Firstly, Toradex configures a default, non-root torizon user inside each container. The user is added to the correct groups by a custom script which simplifies permissions and access to the base Torizon OS system from the container.
COPY users-groups.sh /users-groups.sh
RUN ./users-groups.sh \
&& rm users-groups.sh
Secondly, the enablement of the package repository feed provided by Toradex is performed by the following Dockerfile instructions:
echo "Types: deb\n\
URIs: https://feeds1.toradex.com/debian/snapshots/$TORADEX_SNAPSHOT\n\
Suites: testing\n\
Components: main non-free\n\
Signed-By: /usr/share/keyrings/toradex-debian-repo.gpg" > /etc/apt/sources.list.d/toradex.sources \
&& echo "Package: *\nPin: origin feeds1.toradex.com\nPin-Priority: 900" > /etc/apt/preferences.d/toradex-feeds
For more information about how the Toradex custom Debian feeds enable hardware acceleration from the container, read the Toradex engineering-oriented blog about Hardware Acceleration in Containers.
Additionally, each image has automated tests for the hardware-specific portions, which guarantee that the hardware and kernel are working properly with the base containers. For more information about tests and the Toradex release cycle, refer to the Containers Tags and Versioning page.
You can browse the Toradex GitHub repository torizon/torizon-containers and see exactly what is included in each of the Toradex Debian images.
Support and Security Updates
Support Period
Support for Debian Containers for Torizon ends at whichever comes first: the Torizon OS EOL or the end of Debian security support for the paired release, including the Debian Long Term Support (LTS) period. For the complete policy, see Debian Containers Support.
Security Updates
Debian stable releases receive security fixes throughout their support period. Debian backports fixes for known vulnerabilities to the stable release without moving packages to a new upstream version. The Debian Security Team provides these fixes during regular support, and the Debian LTS team provides them during the LTS period. In most cases, Debian provides the fix for your Debian release, so you do not need to update Torizon OS or move to a newer Debian release to receive it. You need a new Torizon major version only to move to a newer Debian major release, or when the support period of your container major version ends.
For Toradex and SoC-specific packages, Debian does not provide security fixes; the Torizon team handles them when a vulnerability requires an update.
To get the latest security fixes in your application container:
-
Rebuild your container image regularly on top of the latest Debian Containers for Torizon for your Torizon OS major version.
-
Update the installed packages as part of your Dockerfile, for example:
DockerfileARG CT_TAG_DEBIAN
FROM torizon/debian-imx8:$CT_TAG_DEBIAN
RUN apt-get update && apt-get upgrade -y \
&& rm -rf /var/lib/apt/lists/*Set
CT_TAG_DEBIANto the container major tag of your Torizon OS version when you build the image, for example,docker build --build-arg CT_TAG_DEBIAN=4 .for Torizon OS 7.
CVE Handling
When a vulnerability scanner reports a CVE in your container, evaluate it in the context of your application:
- Assess whether an attacker can exploit the CVE in your product. A CVE in a package does not always mean that your product is exploitable. Consider whether your application uses the affected component, how the component is exposed, and what your threat model is.
- Check the status of the CVE for your Debian release in the Debian Security Tracker. Debian does not fix every CVE in every release. For example, a package can be out of scope for Debian LTS. In that case,
apt-get upgradedoes not fix the CVE. - If Debian does not provide a fix for your release, check whether your application needs the affected package. If it does not, remove the package from your container image.
- Use the Torizon Vulnerability Manager to track vulnerabilities across your fleet.