diff --git a/content/Containers/ContainersScreens.md b/content/Containers/ContainersScreens.md index 399d04b2fe..0d9d9294a4 100644 --- a/content/Containers/ContainersScreens.md +++ b/content/Containers/ContainersScreens.md @@ -12,34 +12,41 @@ doctype: reference ## Containers Screen The **Containers** screen allows users to add, edit, or manage Linux containers. - -The **Containers** screen displays **No Containers** before you create the first container. +It shows **No Containers** before adding the first container, and then shows the container as stopped. {{< trueimage src="/images/SCALE/Virtualization/ContainersScreenNoContainers.png" alt="Containers Screen No Containers" id="Containers Screen No Containers" >}} -The **Configuration** dropdown opens options to configure global container settings: -- **Settings** opens the [**Settings**](#settings-screen) screen to configure the preferred pool and default network. -- **Map User/Group IDs** opens the [**Map User and Group IDs**](#map-user-and-group-ids-screen) screen to configure UID and GID mappings. +After adding a container, the screen shows a [table](#containers-table) with rows for each container added in TrueNAS. + +{{< trueimage src="/images/SCALE/Virtualization/InstancesScreenWithInstances.png" alt="Containers Screen - Populated" id="Containers Screen - Populated" >}} + +Selecting a container row shows the individual [container information cards](#containers-cards) for the selected row. +Selecting the checkbox to the left of any table row shows the [bulk operations](#bulk-actions) available to the selected rows. + +The screen header shows two options: + +* **Configuration** - Shows a dropdown menu with two options: + + * [**Settings**](#settings-screen) - Opens the container global settings screen to configure the preferred pool and default network. + + * [**Map User/Group IDs**](#map-user-and-group-ids-screen) - Opens the [**Map User and Group IDs**](#map-user-and-group-ids-screen) screen to configure UID and GID mappings. -**Create New Container** at the top right of the screen opens the **[Add Container](#add-container-screen)** screen. +* **Create New Container** - Opens the [**Add Container**](#add-container-screen) screen. ## Settings Screen -The **Settings** screen displays global options that apply to all containers, including an optional preferred storage pool and default network settings. +The **Settings** screen configures global options that apply to all containers, including an optional preferred storage pool and default network settings. {{< trueimage src="/images/SCALE/Virtualization/InstancesGlobalSettingsScreen.png" alt="Settings Panel" id="Settings Panel" >}} ### Preferred Pool **Preferred Pool** specifies an optional default storage pool for container data. -When no preferred pool is configured, TrueNAS prompts for pool selection at container creation. +When a preferred pool is not configured, TrueNAS prompts for pool selection at container creation. ### Container Storage Location -TrueNAS (25.10 and later) stores containers in a hidden .truenas_containers dataset on the selected pool. -Each container has its own dataset within .truenas_containers, named after the container: *pool*/.truenas_containers/containers/*container_name*. -The .truenas_containers dataset is mounted separately from the pool file system, at /mnt/.truenas_containers/*pool*, to prevent accidental inclusion in SMB or NFS shares. -TrueNAS manages the .truenas_containers dataset internally. Modifying it directly can cause container instability or data loss. +{{< include file="/static/includes/ContainerStorage.md" >}} #### Default Network Settings @@ -55,11 +62,13 @@ TrueNAS manages the .truenas_containers dataset internally. Modifyi ## Map User and Group IDs Screen -The **Map User and Group IDs** screen allows users to manually configure UID and GID mappings between the TrueNAS host and containers. -It opens after clicking **Configuration** on the **Containers** screen header and selecting **Map User/Group IDs**. +The **Map User and Group IDs** screen allows manually configuring UID and GID mappings between the TrueNAS host and containers. +**Map User/Group IDs** in the **Configuration** dropdown on the **Containers** screen header opens the **Map User and Group IDs** window. {{< trueimage src="/images/SCALE/Virtualization/MapUserGroupIDs.png" alt="Map User and Group IDs Screen" id="Map User and Group IDs Screen" >}} +The window opens with the **Users** tab selected by default. The **Groups** tab switches to group configuration settings. + Existing mappings appear in a table listing the user or group name, host ID, and container ID. ** Delete** on a row removes that mapping. @@ -68,205 +77,90 @@ Existing mappings appear in a table listing the user or group name, host ID, and | Setting | Description | |---------|-------------| | **User/Group** | Specifies the user or group account name. Supports local users and groups only; Active Directory and other directory service accounts are not supported. | -| **Map to the same UID/GID in the container** | (Default) Maps the host user or group ID to the same ID inside containers. | -| **Container UID/GID** | (Displays when **Map to the same UID/GID in the container** is not selected) Enter the ID number (e.g., *1000*) to map the host user or group ID to inside containers. | +| **Map to the same UID/GID in the container** | Maps the host user or group ID to the same ID inside containers. Disabling this shows the **Container UID/GID** field. | +| **Container UID/GID** | Specifies the user or group ID (UID/GID) to map the host user or group ID to inside containers (e.g., *1000*). Shows after disabling **Map to the same UID/GID in the container**. | {{< /truetable >}} {{< /expand >}} **Set** creates the mapping. -Changes apply immediately, though restarting the container might be required for them to take effect. - -## Add Container Screen - -The **Add Container** screen displays basic configuration fields and an **Advanced Options** button for additional settings. - -### Basic Settings - -The basic settings are always visible and configure essential container properties. - -{{< trueimage src="/images/SCALE/Virtualization/AddContainerBasic.png" alt="Add Container Basic Settings" id="Add Container Basic Settings" >}} - -{{< truetable >}} -| Setting | Description | -|---------|-------------| -| **Name** | Required. Enter an alphanumeric name for the container. | -| **Description** | Specifies an optional description about the container or how it is used. | -| **Autostart** | Automatically starts the container when the system boots when selected. | -| **Image** | Specifies the operating system image file for the container. **Browse Catalog** opens the **Select Image** screen with available Linux image choices, with an option to search or browse to locate a desired image. | -| **Pool** | Specifies a storage pool for the container. Only shows when no preferred pool is configured in [Settings](#settings-screen). | -{{< /truetable >}} - -{{< include file="/static/includes/InstanceNameRequirements.md" >}} - -### Advanced Options - -**Advanced Options** shows additional configuration settings. - -{{< trueimage src="/images/SCALE/Virtualization/AddContainerAdvanced1.png" alt="Add Container Advanced Options - Part 1" id="Add Container Advanced Options - Part 1" >}} - -#### Storage - -The **Storage** settings only show when a preferred pool is configured in [Settings](#settings-screen). - -{{< truetable >}} -| Setting | Description | -|---------|-------------| -| **Use Preferred Pool** | Sets the selected pool as the preferred pool to store the container. Only shows when a preferred pool is configured. When selected, this container is stored on the configured preferred pool. When not enabled, the **Pool** dropdown shows a list of pools to choose from. | -| **Pool** | Sets a storage pool for the container to use. Only shows when **Use Preferred Pool** is deselected. | -{{< /truetable >}} - -#### CPU Configuration - -The **CPU Configuration** settings bind the container to specific CPU cores. - -{{< truetable >}} -| Setting | Description | -|---------|-------------| -| **CPU Set** | Specifies CPU core numbers to allocate to the container (e.g., *0,1,2* or *0-3*). Leave blank to allow the container access to all host CPU cores. | -{{< /truetable >}} - -#### Time Configuration - -The **Time Configuration** settings control container time zone and shutdown behavior. - -{{< truetable >}} -| Setting | Description | -|---------|-------------| -| **Container Time** | Sets the time zone for the container. **Local** uses the host system time. **UTC** uses Coordinated Universal Time. | -| **Shutdown Timeout** | Specifies the number of seconds to wait for the container to shut down gracefully before forcing termination. Default is 30 seconds. | -{{< /truetable >}} - -#### Init Process - -The **Init Process** settings configure the initialization process for the container. - -{{< truetable >}} -| Setting | Description | -|---------|-------------| -| **Init Process** | Specifies the init process command line. Default is `/sbin/init`. | -| **Init Working Directory** | Specifies the working directory for the init process. | -| **Init User** | Specifies the user to run the init process as. | -| **Init Group** | Specifies the group to run the init process as. | -{{< /truetable >}} - -{{< trueimage src="/images/SCALE/Virtualization/AddContainerAdvanced2.png" alt="Add Container Advanced Options - Part 2" id="Add Container Advanced Options - Part 2" >}} - -#### Environment Variables - -The **Environment Variables** settings configure optional environment variables to run on boot or execute. - -**Add** shows a set of environment variable fields each time you click it. - -{{< truetable >}} -| Setting | Description | -|---------|-------------| -| **Name** | Specifies the environment variable name (e.g., *PATH*, *HOME*). | -| **Value** | Specifies the value for the environment variable. | -{{< /truetable >}} - -#### ID Mapping - -The **ID Mapping** settings configure how user and group IDs (UIDs/GIDs) inside the container map to UIDs/GIDs on the TrueNAS host. -This setting is available at container creation only and cannot be changed after the container is created. - -{{< truetable >}} -| Setting | Description | -|---------|-------------| -| **ID Map Type** | Sets the UID/GID mapping mode for the container from the options:
  • **Default** (Recommended): Maps the container root (UID 0) to the unprivileged host user **truenas_container_unpriv_root** (UID 2147000001). All other container UIDs are offset by the same amount (e.g., container UID 1000 becomes host UID 2147001001). Provides security isolation while allowing normal container operations.
  • **Isolated**: Uses the same offset as default but shifts the base further by a per-container slice value, ensuring no two containers share host UID ranges. Use when multiple containers access the same host datasets and non-overlapping UID ranges are required. TrueNAS automatically assigns a unique slice if none is specified.
  • **Privileged**: Applies no UID/GID mapping — container UIDs map directly to the same UIDs on the host. Container root (UID 0) becomes host root. Use only when an application explicitly requires direct UID mapping.
  • | -{{< /truetable >}} - -{{< hint type=warning title="Privileged ID Mapping Warning" >}} -Setting **ID Map Type** to **Privileged** removes all UID isolation between the container and the TrueNAS host. -Container processes running as root have direct host root access. -Use only when an application explicitly requires it and you understand the security implications. -{{< /hint >}} - -#### Capabilities - -**Capabilities** settings control Linux capabilities, which are special permissions that divide root privileges into distinct units. -Allows containers to perform specific privileged operations without granting full root access. - -{{< truetable >}} -| Setting | Description | -|---------|-------------| -| **Capabilities Policy** | Sets the default policy for container capabilities:
  • **DEFAULT** (Recommended): Keeps most capabilities but drops dangerous ones (sys_module, sys_time, mknod, audit_control, mac_admin). Provides security while allowing normal container operations.
  • **ALLOW**: Grants all capabilities. Use when containers need broad system access, but reduces security isolation. | -{{< /truetable >}} - -{{< hint type=note >}} -Device configuration (network interfaces, USB devices, GPU devices, and file system mounts) is performed after container creation using the detail cards on the **Containers** screen. -See [Containers Cards](#containers-cards) for information on configuring devices. -{{< /hint >}} +Changes apply immediately, though restarting the container might be required before they take effect. ## Containers Table -The **Containers** table lists each configured container name, current state, autostart setting, and live resource metrics: **CPU %**, **Memory MiB**, and **Disk I/O % Full Pressure** (shown as *N/A* when the container is stopped or metrics are unavailable). -Stopped containers show the option to start the container. +The **Containers** table lists each configured container name, current state, autostart setting, and live resource metrics: **CPU %**, **Memory MiB**, and **Disk I/O % Full Pressure** (shown as *N/A* when the container is stopped or metrics are unavailable). +Each container row includes two buttons: +* **Restart** - Stops, then automatically restarts the container. Does not show when the container is stopped. +* **Controls** - Starts or stops the container. It toggles between start or stop based on the current state of the container. When stopping a running container, it opens the [**Stop Options**](#stop-options-dialog) dialog. -{{< trueimage src="/images/SCALE/Virtualization/InstancesScreenWithInstances.png" alt="Containers Screen - Populated" id="Containers Screen - Populated" >}} +Selecting a container row in the table shows the **Details for *Container*** [cards](#containers-cards), which show information and management options for the selected container. -The **Details for *Container*** [cards](#containers-cards) show information and management options for the selected container. +The checkbox at the left of each container row shows the [**Bulk Actions**](#bulk-actions) options. -The button restarts or the button stops a running container. +**Search** above the **Containers** table allows entering the name of a container to locate a configured container. -The **Stop Options** window defines how the container stops: +### Stop Options Dialog -- **Wait for graceful stop** - Sends a shutdown signal and waits indefinitely for the container to stop gracefully. Does not force kill the container. -- **Wait for graceful stop, then force** - Sends a shutdown signal and waits for the shutdown timeout (default 30 seconds) for the container. Force-kills the container if still running after the timeout expires. -- **Force stop immediately** - Immediately force kills the container without attempting graceful shutdown. +The **Stop Options** dialog sets how the container stops. {{< trueimage src="/images/SCALE/Virtualization/InstanceStopOptions.png" alt="Container Stop Options" id="Container Stop Options" >}} -The button starts a stopped container. - -**Search** above the **Containers** table allows entering the name of a container to locate a configured container. - -The checkbox on each container row shows the [**Bulk Actions**](#bulk-actions) dropdown. +The **Stop Method** dropdown shows three options: +- **Wait for graceful stop** - Sends a shutdown signal and waits up to the shutdown timeout for the container to stop gracefully. Does not force-kill the container, so it keeps running if it has not stopped by then. +- **Wait for graceful stop, then force** - Sends a shutdown signal and waits for the shutdown timeout (default 30 seconds) for the container. Force-kills the container if still running after the timeout expires. +- **Force stop immediately** - Immediately force-kills the container without attempting graceful shutdown. ### Bulk Actions -The **Bulk Actions** dropdown list allows you to apply actions to one or more containers on your system. +The **Bulk Actions** dropdown list applies the selected action to the containers selected in the table. Options are **Start All Selected**, **Stop All Selected**, and **Restart All Selected**. {{< trueimage src="/images/SCALE/Virtualization/InstancesBulkActions.png" alt="Bulk Actions" id="Bulk Actions" >}} ## Containers Cards -The **Details for *Container*** cards display information and configuration options for the selected container. +The **Details for *Container*** cards show information and configuration options for the selected container. ### General Info Card -The **General Info** card displays container configuration details including **Description**, **Autostart**, **Dataset**, **CPU Set**, **Container Time**, **Shutdown Timeout**, **Init Process** command, and **Capabilities Policy**. **Init Working Directory**, **Init User**, and **Init Group** also display when configured. -It includes the **Edit** and **Delete** buttons for the container. +The **General Info** card shows container configuration details including **Description**, **Autostart**, **Dataset**, **CPU Set**, **Container Time**, **Shutdown Timeout**, **Init Process** command, and **Capabilities Policy**. +The **Init Working Directory**, **Init User**, and **Init Group** also show when configured. {{< trueimage src="/images/SCALE/Virtualization/GeneralInfoWidget.png" alt="General Info Card" id="General Info Card" >}} -**[Delete](#delete-containers)** opens the **Delete** dialog. +**[Delete](#delete-container-dialog)** opens the **Delete Container** dialog. **[Edit](#edit-container-screen)** opens an **Edit Container: *Container*** configuration screen populated with editable settings also found on the install wizard screen for the container. -#### Delete Containers +#### Delete Container Dialog -The **Delete** dialog asks for confirmation to delete the selected container. +The **Delete Container** dialog asks for confirmation to delete the selected container and shows three options: +* **Stop container before deleting** force-stops the container (no graceful shutdown) before deleting it. Required, and selected automatically, when the container is running or suspended. +* **Delete child datasets, snapshots and clones** also destroys the child datasets and snapshots of the container dataset, and any clones of those snapshots anywhere in the pool, and any snapshot holds, which can break a replication task. Required when the container dataset has child datasets or snapshots. This cannot be undone. +* **Confirm** activates the **Delete** button. -{{< trueimage src="/images/SCALE/Virtualization/DeleteInstance.png" alt="Delete Container Dialog" id="Delete Container Dialog" >}} +{{< trueimage src="/images/SCALE/Virtualization/DeleteContainerDialog.png" alt="Delete Container Dialog" id="Delete Container Dialog" >}} -**Confirm** activates the **Continue** button. -**Continue** starts the delete operation. +**Delete** starts the delete operation. ### USB Devices Card -The **USB Devices** card displays USB devices attached to the container, allowing hardware passthrough for USB peripherals. +The **USB Devices** card shows USB devices attached to the container, allowing hardware passthrough for USB peripherals. {{< trueimage src="/images/SCALE/Virtualization/DevicesWidget.png" alt="USB Devices Card" id="USB Devices Card" >}} -**Add** opens a list of available USB devices to attach to the container. +**Add** shows a list of available USB devices that can be attached to the container. + +USB devices appear in the list only if they are physically connected to the TrueNAS system, are not USB hubs, and provide the required information to TrueNAS (bus, device number, vendor ID, and product ID). ### GPU Devices Card -The **GPU Devices** card displays GPU hardware attached to the container for graphics or computation acceleration. +The **GPU Devices** card shows GPU hardware attached to the container for graphics or computation acceleration. +TrueNAS allows configuring the same GPU for a VM or a Container, but not both. If your system is equipped with multiple GPUs, TrueNAS allows configuring one for VMs and the other for a container. {{< trueimage src="/images/SCALE/Virtualization/GPUDevices.png" alt="GPU Devices Card" id="GPU Devices Card" >}} + +{{< expand "GPU Vendor List" "v" >}} TrueNAS supports GPU passthrough for containers with the following GPU vendors: {{< truetable >}} @@ -276,21 +170,28 @@ TrueNAS supports GPU passthrough for containers with the following GPU vendors: | **Intel** | Native support | No additional driver installation required. | | **AMD** | Native support | No additional driver installation required. | {{< /truetable >}} +{{< /expand >}} + +**No GPU Devices available** shows if TrueNAS does not detect available GPU devices in the system. **Add** opens a list of available GPU devices. -GPU devices only appear in the list if: +GPU devices only show in the list if: - The physical GPU hardware is installed and detected by TrueNAS - The NVIDIA GPU drivers are installed via **System > Advanced Settings** - The GPU device is not currently allocated to another container or VM +{{< enterprise >}} +HA systems do not support GPU devices. +{{< /enterprise >}} + ### Filesystem Devices Card -The **Filesystem Devices** card displays file system mounts that provide the container with access to host directories and datasets. +The **Filesystem Devices** card shows file system mounts that provide the container with access to host directories and datasets. File system devices allow containers to read and write data to TrueNAS datasets or host paths. {{< trueimage src="/images/SCALE/Virtualization/FilesystemDevicesWidget.png" alt="Filesystem Devices Card" id="Filesystem Devices Card" >}} -**Add** opens fields to configure a new file system device mount. +**Add** activates after stopping the container. It then opens the **Add Filesystem Device** screen with fields to configure a new file system device mount. {{< trueimage src="/images/SCALE/Virtualization/AddFilesystemDevice.png" alt="Add Filesystem Device" id="Add Filesystem Device" >}} @@ -301,17 +202,25 @@ File system devices allow containers to read and write data to TrueNAS datasets | **Container Mount Path** | Specifies the mount path inside the container where the file system appears, for example */mnt/data* or */var/lib/data*. | {{< /truetable >}} -For existing filesystem devices, the more_vert actions menu includes options to **Edit** or **Delete** the filesystem device. +For existing filesystem devices, the more_vert actions menu includes options to **Edit** or **Delete** the filesystem device. **Edit** opens the **Edit Filesystem Device** screen. **Delete** opens the **Delete Item** dialog. + +See [Configuring Filesystem Devices]({{< relref "/Containers/ManagingContainers.md#configuring-file-system-devices" >}}) in the Containers tutorial for configuration procedures. + +#### Delete Item Dialog + +The **Delete** option for a file system opens the **Delete Item** dialog and removes only the selected file system. -See [Configuring Filesystem Devices]({{< relref "/Containers/ManagingContainers.md#configuring-filesystem-devices" >}}) in the Containers tutorial for configuration procedures. +{{< trueimage src="/images/SCALE/Virtualization/DeleteItemDialog.png" alt="Filesystem Delete Item Dialog" id="Filesystem Delete Item Dialog" >}} + +**Confirm** activates the **Continue** button. **Continue** starts the delete process. ### NIC Devices Card -The **NIC Devices** card displays network interfaces (NICs) attached to the container. +The **NIC Devices** card shows network interfaces (NICs) attached to the container. {{< trueimage src="/images/SCALE/Virtualization/NICWidget.png" alt="NIC Devices Card" id="NIC Devices Card" >}} -Each NIC displays the network interface name and MAC address in the format: *{interface_name} ({mac_address})*. +Each NIC device shows the network interface name and MAC address in the format: *{interface_name} ({mac_address})*. For example: *br0 (aa:bb:cc:dd:ee:ff)* or *br0 (Default Mac Address)*. {{< hint type=important >}} @@ -319,21 +228,21 @@ NIC modifications are restricted when there are pending network interface change If the card displays a warning about pending changes, apply or revert those network changes before modifying container NICs. {{< /hint >}} -**Add** opens a menu with available network interfaces grouped by type. +**Add** shows a list of available network interfaces grouped by type as **BRIDGED NICS** or **MACVLAN NICS**. Selecting an interface opens the **Add NIC Device** dialog. #### Add/Edit NIC Device Dialog -The **Add/Edit NIC Device** dialog configures network interface settings for the container. +The **Add NIC Device** and **Edit NIC Device** dialogs configure network interface settings for the container. {{< trueimage src="/images/SCALE/Virtualization/AddContainerNICDevice.png" alt="Add NIC Device" id="Add NIC Device" >}} {{< truetable >}} | Setting | Description | |---------|-------------| -| **NIC Type** | Sets the NIC type (*virtio*, *macvlan*, *ipvlan*, etc.). | +| **NIC Type** | Sets the NIC type. Options are *VirtIO* or *Intel e82585 (e1000)*. | | **Use Default Mac Address** | Sets TrueNAS to automatically assign a MAC address. Only available when adding a new NIC. | | **Mac Address** | Specifies a custom MAC address. Only shows while adding and when **Use Default Mac Address** is not selected. If editing a NIC, leave empty to use the default MAC address. | -| **Trust Guest RX Filters** | (*virtio* type only) When enabled, trusts guest OS receive filter settings for better performance. | +| **Trust Guest RX Filters** | Sets whether to trust guest OS receive filter settings for better performance. Shows when **NIC Type** is set to **VirtIO**. Applies only to a VirtIO NIC added from **MACVLAN NICS**. For a NIC from **BRIDGED NICS**, TrueNAS rejects or ignores it. | {{< /truetable >}} **Add** or **Update** applies the NIC configuration. @@ -354,11 +263,150 @@ The **Tools** card provides quick access to the container shell. {{< include file="/static/includes/WebShellAccessRoles.md" >}} +## Add Container Screen + +The **Add Container** screen displays basic configuration fields and an **Advanced Options** button for additional settings. + +### Basic Settings + +The basic settings are always visible and configure essential container properties. + +{{< trueimage src="/images/SCALE/Virtualization/AddContainerBasic.png" alt="Add Container Basic Settings" id="Add Container Basic Settings" >}} + +{{< truetable >}} +| Setting | Description | +|---------|-------------| +| **Name** | Specifies a required name for the container. Names consist of upper or lower case alphanumeric or allowed special characters. | +| **Description** | Specifies an optional description about the container or how it is used. | +| **Autostart** | Sets the container to automatically start when the system boots. | +| **Image** | Specifies the operating system image file for the container. | +| **Pool** | Specifies a storage pool for the container. Only shows when a preferred pool is not configured in [Settings](#settings-screen). | +| **Connect to network** | Adds a NIC attached to the bridge set in **Bridge** on the [Settings](#settings-screen) screen (*truenasbr0* when **Bridge** is set to **Automatic**). Selected by default. Leave disabled to create the container without network access. Only shows when adding a container. Note: NICs can be added or removed later on the [NIC Devices](#nic-devices-card) card. | +{{< /truetable >}} + +**Browse Catalog** opens the **Select Image** window showing available Linux image choices, and options to search or browse to locate a desired image. + +{{< include file="/static/includes/InstanceNameRequirements.md" >}} + +### Advanced Options + +**Advanced Options** shows the basic and additional configuration settings. + +{{< trueimage src="/images/SCALE/Virtualization/AddContainerAdvanced1.png" alt="Add Container Advanced Options - Part 1" id="Add Container Advanced Options - Part 1" >}} + +#### Storage + +The **Storage** settings only show when a preferred pool is configured in [Settings](#settings-screen). + +{{< truetable >}} +| Setting | Description | +|---------|-------------| +| **Use Preferred Pool** | Sets the selected pool as the preferred pool to store the container. Only shows when a preferred pool is configured. When selected, this container is stored on the configured preferred pool. When not enabled, the **Pool** dropdown shows a list of pools to choose from. | +| **Pool** | Sets a storage pool for the container to use. Only shows when **Use Preferred Pool** is deselected. | +{{< /truetable >}} + +#### CPU Configuration + +The **CPU Configuration** settings bind the container to specific CPU cores. + +{{< truetable >}} +| Setting | Description | +|---------|-------------| +| **CPU Set** | Specifies CPU core numbers to allocate to the container (e.g., *0,1,2* or *0-3*). Leave blank to allow the container access to all host CPU cores. | +{{< /truetable >}} + +#### Time Configuration + +The **Time Configuration** settings control container time zone and shutdown behavior. + +{{< truetable >}} +| Setting | Description | +|---------|-------------| +| **Container Time** | Sets the time zone for the container. **Local** uses the host system time. **UTC** uses Coordinated Universal Time. | +| **Shutdown Timeout** | Specifies the number of seconds to wait for the container to shut down gracefully before forcing termination. Default is 30 seconds. | +{{< /truetable >}} + +#### Init Process + +The **Init Process** settings configure the initialization process for the container. + +{{< truetable >}} +| Setting | Description | +|---------|-------------| +| **Init Process** | Specifies the init process command line. Default is `/sbin/init`. | +| **Init Working Directory** | Specifies the working directory for the init process. | +| **Init User** | Specifies the user to run the init process as. | +| **Init Group** | Specifies the group to run the init process as. | +{{< /truetable >}} + +{{< trueimage src="/images/SCALE/Virtualization/AddContainerAdvanced2.png" alt="Add Container Advanced Options - Part 2" id="Add Container Advanced Options - Part 2" >}} + +#### Environment Variables + +The **Environment Variables** settings configure optional environment variables to run on boot or execute. + +**Add** shows a set of environment variable **Name** and **Value** fields each time it is clicked. + +{{< truetable >}} +| Setting | Description | +|---------|-------------| +| **Name** | Specifies the environment variable name (e.g., *PATH*, *HOME*). | +| **Value** | Specifies the value for the environment variable. | +{{< /truetable >}} + +#### USB Devices + +The **USB Devices** settings configure USB devices for the container. +USB device settings only show when creating a container, and only if the system reports an eligible device. Hubs and devices missing identification are left out. +At least one USB device must be detectable, or the **USB Devices** settings do not show in the advanced settings. + +USB devices found show as a selectable checkbox option. For example, **Virtual Keyboard and Mouse by American Megatrends, Inc**. + +USB devices pass through to the container. Devices are identified by the physical port they are plugged into. + +HA-capable systems cannot use USB passthrough. + +Each USB device can only be attached once per container. + +#### ID Mapping + +The **ID Mapping** settings configure how user and group IDs (UIDs/GIDs) inside the container map to UIDs/GIDs on the TrueNAS host. +This setting is available at container creation only and cannot be changed after the container is created. + +{{< truetable >}} +| Setting | Description | +|---------|-------------| +| **ID Map Type** | Sets the UID/GID mapping mode for the container from the options: | +{{< /truetable >}} + +{{< hint type=warning title="Privileged ID Mapping Warning" >}} +Setting **ID Map Type** to **Privileged** removes all UID isolation between the container and the TrueNAS host. +Container processes running as root have direct host root access. +Use only when an application explicitly requires it, and you understand the security implications. +{{< /hint >}} + +#### Capabilities + +**Capabilities** settings control Linux capabilities, which are special permissions that divide root privileges into distinct units. +Allows containers to perform specific privileged operations without granting full root access. + +{{< truetable >}} +| Setting | Description | +|---------|-------------| +| **Capabilities Policy** | Sets the default policy for container capabilities: | +{{< /truetable >}} + +{{< hint type=note >}} +Device configuration (network interfaces, GPU devices, and file system mounts) is performed after container creation using the detail cards on the **Containers** screen. +You can select USB devices in the advanced settings when you create the container, or add them afterward using the **USB Devices** card. +See [Containers Cards](#containers-cards) for information on configuring devices. +{{< /hint >}} + ## Edit Container Screen -The **Edit Container: *Container*** screen includes most settings from the **[Add Container Screen](#add-container-screen)** except **Image**, **Pool**, and **ID Map Type**. +The **Edit Container: *Container*** screen includes most settings from the **[Add Container Screen](#add-container-screen)** except **Image**, **Pool**, **USB Devices**, and **ID Map Type**. -Settings available in edit mode include **Name**, **Description**, **Autostart**, and all **Advanced Options** (**CPU Configuration**, **Time Configuration**, **Init Process**, **Environment Variables**, and **Capabilities**). +Settings available in edit mode include **Name**, **Description**, **Autostart**, and these **Advanced Options**: **CPU Configuration**, **Time Configuration**, **Init Process**, **Environment Variables**, and **Capabilities**. Note that the **Init Process** command field cannot be changed after creation, but **Init Working Directory**, **Init User**, and **Init Group** remain editable. @@ -366,9 +414,10 @@ Device, disk, network, and other settings are configured via the [Containers Car {{< trueimage src="/images/SCALE/Virtualization/EditContainerBasic.png" alt="Edit Container Screen" id="Edit Container Screen" >}} -The screen has **Basic** settings (Name, Description, Autostart) visible by default, with an **Advanced Options** button to expand additional configuration sections. +The screen has **Basic** settings (Name, Description, Autostart) visible by default. +**Advanced Options** expands to show additional configuration sections. -For detailed field descriptions, see the **[Add Container Screen](#add-container-screen)** section. The Edit screen uses the same fields except **Image**, **Pool**, **ID Map Type**, and the **Init Process** command (none of which can be changed after creation). +For detailed field descriptions, see the **[Add Container Screen](#add-container-screen)** section. The edit screen uses the same fields except **Image**, **Pool**, **USB Devices**, **ID Map Type**, and the **Init Process** command (none of which can be changed after creation). {{< enterprise >}} **Autostart in HA Environments** @@ -376,4 +425,4 @@ For detailed field descriptions, see the **[Add Container Screen](#add-container In High Availability configurations, containers with autostart enabled automatically restart on the new active controller after a failover. Ensure containers have static IP addresses configured to maintain network connectivity after failover. See [Containers in High Availability Environments]({{< relref "/Containers/ManagingContainers.md#containers-in-high-availability-environments" >}}) for details. -{{< /enterprise >}} \ No newline at end of file +{{< /enterprise >}} diff --git a/content/Containers/ManagingContainers.md b/content/Containers/ManagingContainers.md index d63f16316b..50b821f92f 100644 --- a/content/Containers/ManagingContainers.md +++ b/content/Containers/ManagingContainers.md @@ -1,6 +1,6 @@ --- title: "Creating and Managing Containers" -description: "Tutorials for configuring the TrueNAS Containers feature, creating, and managing containers." +description: "Tutorials for configuring the TrueNAS containers feature, creating, and managing containers." geekdocCollapseSection: true weight: 20 aliases: @@ -106,7 +106,7 @@ To configure default network settings: 1. Click **Configuration** on the **Containers** screen header and select **Settings**. 2. Select a bridge from the **Bridge** dropdown list: - - **Automatic** to allow TrueNAS to create and manage a dedicated virtual bridge (`truenasbr0`) on the TrueNAS host using DHCP and routes their outbound traffic through the host via NAT. Change the defaults using the **IPv4 Network** and **IPv6 Network** fields if they conflict with your network. + - **Automatic** to allow TrueNAS to create and manage a dedicated virtual bridge (`truenasbr0`) on the TrueNAS host using DHCP, and to route outbound traffic through the host via NAT. Change the defaults using the **IPv4 Network** and **IPv6 Network** fields if they conflict with your network. The default ranges are 172.200.0.0/24 and fd42:4c58:43ae::/64. - Select an existing bridge interface to use that bridge for container networking. See [Accessing NAS from VMs and Containers]({{< relref "/Network/ContainerNASBridge.md" >}}) for information on creating bridge interfaces. @@ -137,12 +137,13 @@ TrueNAS 27 adds support for containers in High Availability (HA) configurations. Containers can run on HA systems and automatically restart after a controller failover. However, HA environments require specific network configuration to ensure containers remain accessible after failover events. -{{< hint type=warning title="Static IP Configuration Required" >}} -Containers in HA environments must have a static IP address configured in the container operating system. +USB and GPU devices are not supported in HA systems, and custom bridges are not available. -Without a static IP, the container loses network connectivity after a controller failover and becomes inaccessible. +{{< hint type=warning title="Static IP Configuration Required" >}} +Configure a static IP address in the container operating system. +For a NIC on the automatic bridge, the address must be within the container network (the **IPv4 Network** or **IPv6 Network** on the **Settings** screen). Do not use the first address in the network (for example, 172.200.0.1), which TrueNAS uses as the gateway. TrueNAS assigns the other IPv4 addresses to containers automatically without checking whether one is already in use, so a static address can end up shared with another container. +Without a static IP, the container might receive a different address after a controller failover. -Configure the static IP inside the container OS, not in TrueNAS network settings. Refer to your container operating system documentation for instructions on setting a static IP address. {{< /hint >}} @@ -151,41 +152,40 @@ Refer to your container operating system documentation for instructions on setti When you configure containers for HA environments: - Configure a static IP address inside each container OS before deploying containers in an HA system. - This ensures the container retains its IP address across reboots and failover events. - Maintain records of static IP addresses assigned to each container for troubleshooting and network planning. -- Mount container data to datasets that persist across failovers. - This ensures container data remains available after a controller switchover. + This ensures the container retains its IP address across reboots and failover events. +- Mount container data to datasets that persist across failovers. + This ensures container data remains available after a controller switchover. - Select the **Autostart** option in container configuration to automatically start containers after a failover. - See [Editing Container Configuration Settings](#editing-container-configuration-settings) for details. + See [Editing Containers](#editing-containers) for details. - Perform test failovers to verify containers restart properly and remain accessible with their static IP addresses. #### Understanding Container Failover Behavior When a controller failover occurs in an HA system: -- Containers on the active controller experience a hard shutdown without a graceful stop sequence. +- Containers on the previously active controller are stopped during failover. If a stop takes too long, or there is a controller failure, containers can end abruptly. - After failover completes, containers configured with **Autostart** automatically start on the new active controller. -- Containers with static IP addresses restore network connectivity and become accessible again. +- Containers with static IP addresses keep the assigned IP address. - Container data persists if stored on datasets that remain available after failover. {{< hint type=important title="Data Persistence During Failover" >}} -A hard shutdown during failover can result in data loss for applications that do not handle abrupt stops gracefully. +An abrupt stop during failover can result in data loss for applications that do not handle it gracefully. For production containers in HA environments: -- Use applications designed to handle unexpected shutdowns -- Configure regular backups or snapshots -- Store critical data on persistent datasets -- Test your containers' behavior during simulated failovers +- Use applications designed to handle unexpected shutdowns. +- Configure regular backups or snapshots. +- Store critical data on persistent datasets. +- Test your containers' behavior during simulated failovers. {{< /hint >}} ### Managing Container Permissions -When a container reads or writes to a host dataset mounted via a [file system device](#configuring-filesystem-devices), TrueNAS checks whether the user identity inside the container has permission to access that path on the host. +When a container reads or writes to a host dataset mounted via a [file system device](#configuring-file-system-devices), TrueNAS checks whether the user identity inside the container has permission to access that path on the host. User accounts inside containers are independent from host user accounts, so a user named *appuser* with UID *1000* inside a container is not the same identity as UID *1000* on the TrueNAS host, even though they share the same number. To bridge this gap, TrueNAS uses **UID/GID mapping**: a translation layer that tells the host which host user corresponds to each container user. -For most containers you do not need to configure this manually — the default behavior set by the **ID Map Type** for the container at creation time handles it automatically. +For most containers, you do not need to configure this manually — the default behavior set by the **ID Map Type** for the container at creation time handles it automatically. The **Map User/Group IDs** screen is for cases where you need finer control, such as granting a specific host user access to data a container reads or writes. #### Understanding Default Mapping @@ -215,7 +215,7 @@ Click **Configuration** on the **Containers** screen header and select **Map Use {{< trueimage src="/images/SCALE/Virtualization/MapUserGroupIDs.png" alt="Map User and Group IDs Screen" id="Map User and Group IDs Screen" >}} -Select the **Users** or **Groups** tab to view and manage mappings for user or group accounts respectively. +Select the **Users** or **Groups** tab to view and manage mappings for user or group accounts, respectively. Existing mappings appear in a table listing the user or group name, host ID, and container ID. Click ** Delete** on a row to remove a mapping. @@ -238,7 +238,7 @@ Only local TrueNAS users and groups are supported. Active Directory and other di For example, if your container runs a service as UID *1000* and you want it to read and write to a TrueNAS dataset owned by the local user *mediauser* (host UID *3000*): -1. Create a mapping for the host user *mediauser* to the container UID *1000*. +1. Create a mapping for the host user *mediauser* to the container UID *1000*. 2. Assign the dataset permissions to *mediauser* on the host. 3. The container service running as UID *1000* can now access that dataset. @@ -256,29 +256,32 @@ The **Add Container** screen displays basic configuration fields and an **Advanc {{< trueimage src="/images/SCALE/Virtualization/AddContainerBasic.png" alt="Add Container Basic Settings" id="Add Container Basic Settings" >}} +{{< include file="/static/includes/ContainerStorage.md" >}} + To create a new container: 1. Enter a **Name** for the container. {{< include file="/static/includes/InstanceNameRequirements.md" >}} -2. (Optional) Enter a **Description** for the container. +2. Enter an optional description for the container in **Description**. -3. (Optional) Select **Autostart** to automatically start the container when the system boots. +3. Select **Autostart** to automatically start the container when the system boots. + This is not required but is recommended if the container needs to start automatically, like for HA systems or when deploying always-on apps. When you enable autostart, TrueNAS automatically starts the container during system boot after the containers service initializes, ensuring services are available immediately after system startup. During system shutdown, TrueNAS sends a graceful shutdown signal to the container, allowing applications to close properly and save data. -4. Click **Browse Catalog** to open the **Select Image** screen. +4. Select the image the container uses. Click **Browse Catalog** to open the **Select Image** screen. {{< trueimage src="/images/SCALE/Virtualization/SelectImage.png" alt="Select Image Screen" id="Select Image Screen" >}} Search or browse to choose a Linux image. Click **Select** in the row for your desired image. -5. (Conditional) Select a **Pool** for the container. +5. Select a **Pool** for the container if the preferred pool is not already set. This field appears when no preferred pool is configured in global container settings. -6. (Optional) Click **Advanced Options** to configure additional settings: +6. Click **Advanced Options** to configure optional additional settings: - Use **CPU Configuration** to bind the container to specific CPU cores (useful for performance-sensitive workloads or isolating container resources). @@ -287,6 +290,10 @@ To create a new container: - Use **Init Process** to configure the init command, working directory, and user/group for the PID 1 process for the container. The default init command is `/sbin/init`. Note: The init command cannot be changed after creation, but working directory, user, and group remain editable. + - Use **USB Devices** to attach the device shown to the container. TrueNAS attaches the USB based on port number and not by the device name. + Note: TrueNAS detects USB devices that are not USB hubs and provide the required information (device number, vendor ID, and product ID). + This section does not show if there are no USB devices detected by TrueNAS. + - Use **ID Mapping** to control how container UIDs and GIDs map to host UIDs and GIDs. This setting cannot be changed after the container is created. Options include: - **Default** (recommended): Container root maps to the unprivileged host user **truenas_container_unpriv_root**. Provides security isolation for most workloads. - **Isolated**: Assigns a unique UID/GID range to this container to prevent overlap with other containers. Use when multiple containers share access to the same host datasets. @@ -299,19 +306,21 @@ To create a new container: 7. Click **Create** to deploy the container. {{< hint type=note title="Configuring Devices After Creation" >}} -Device configuration (network interfaces, USB devices, GPU devices, and file system mounts) is performed after container creation using the detail cards on the **Containers** screen. +Configuring network interfaces, USB or GPU devices, and file system mounts is performed after creating the container using the detail cards on the **Containers** screen. + +Initial USB configuration occurs on the **Add Container** advanced settings screen if TrueNAS detects USB devices, but you can also add a device after adding the container using the **Add** button on the **USB Devices** card. The USB devices must show the required information before TrueNAS shows them as USB options you can add to the container. See the following sections for device configuration procedures: - [Managing NICs](#managing-nics) for network interface configuration - [Managing USB Devices](#managing-usb-devices) for USB device passthrough - [Managing GPU Devices](#managing-gpu-devices) for GPU hardware acceleration -- [Configuring File system Devices](#configuring-filesystem-devices) for additional file system mounts +- [Configuring File System Devices](#configuring-file-system-devices) for additional file system mounts {{< /hint >}} ### Running Nested Containers -A nested container is a container that runs its own container runtime — for example, a TrueNAS container with Docker installed and running inside it. +A *nested container* is a container that runs its own container runtime — for example, a TrueNAS container with Docker installed and running inside it. Nested container runtimes require direct UID mapping and full Linux capabilities, which means the container must be configured as privileged. {{< hint type=warning title="Privileged Containers Reduce Security Isolation" >}} @@ -371,15 +380,14 @@ After selecting the container row in the table to populate the **Details for *Co Click **Edit** to open the **Edit Container: *Container*** screen. -The edit screen allows you to modify container settings after creation. You can change **Name**, **Description**, **Autostart**, and all **Advanced Options** settings. +The edit screen allows you to modify container settings after creation. You can change **Name**, **Description**, **Autostart**, and some of the **Advanced Options** settings. {{< trueimage src="/images/SCALE/Virtualization/EditContainerBasic.png" alt="Edit Container Screen" id="Edit Container Screen" >}} **Settings you cannot change after creation:** -The edit screen allows you to modify container settings after creation. You can change **Name**, **Description**, **Autostart**, and all **Advanced Options** settings. -- **Pool**: The storage pool cannot be changed after deployment -- **ID Map Type**: The UID/GID mapping mode is fixed at creation -- **Init Process** command: The init command is fixed, but **Init Working Directory**, **Init User**, and **Init Group** remain editable +- **Pool** - The storage pool cannot be changed after deployment. +- **ID Map Type** - The UID/GID mapping mode is fixed at creation. +- **Init Process** command - The init command is fixed, but **Init Working Directory**, **Init User**, and **Init Group** remain editable. For detailed information about each setting, see the [Add Container Screen]({{< relref "/Containers/ContainersScreens.md#add-container-screen" >}}) section in the UI Reference. @@ -389,24 +397,29 @@ After selecting the container row in the table to populate the **Details for *Co {{< trueimage src="/images/SCALE/Virtualization/GeneralInfoWidget.png" alt="General Info Card" id="General Info Card" >}} -Click **Delete** to open the **Delete** dialog. +Click **Delete** to open the **Delete Container** dialog. + +{{< trueimage src="/images/SCALE/Virtualization/DeleteContainerDialog.png" alt="Delete Container Dialog" id="Delete Container Dialog" >}} -{{< trueimage src="/images/SCALE/Virtualization/DeleteInstance.png" alt="Delete Container Dialog" id="Delete Container Dialog" >}} +Select the options you want to enable. +**Stop container before deleting** force-stops the container (no graceful shutdown) before deleting it. Required, and selected automatically, when the container is running or suspended. +**Delete child datasets, snapshots and clones** also destroys the child datasets and snapshots of the container dataset, any clones of those snapshots anywhere in the pool, and any snapshot holds, which can break a replication task. Required when the container dataset has child datasets or snapshots. This cannot be undone. -Select **Confirm** to activate the **Continue** button. -Click **Continue** to delete the container. +Select **Confirm** to activate the **Delete** button. +Click **Delete** to delete the container. ### Managing USB Devices Use the **USB Devices** card to view and manage USB devices attached to the container. +The container must be stopped before the **Add** button activates. + USB device passthrough allows containers to access USB peripherals as if they are physically connected. {{< trueimage src="/images/SCALE/Virtualization/DevicesWidget.png" alt="USB Devices Card" id="USB Devices Card" >}} -Click **Add** to open a list of available USB devices. -USB device passthrough allows containers to access USB peripherals as if they are physically connected. +Click **Add** to see a list of available USB devices. TrueNAS can attach a device by port or by ID. Attaching by port stays tied to the physical port. Attaching by ID matches the device on any port. -USB devices appear in the list only if they are physically connected to the TrueNAS system and not currently allocated to another container or VM. +USB devices appear in the list only if they are physically connected to the TrueNAS system, are not USB hubs, and provide the required information to TrueNAS (bus, device number, vendor ID, and product ID). ### Managing GPU Devices @@ -431,21 +444,28 @@ GPU devices appear in the list only if: - The physical GPU hardware is installed and detected by TrueNAS. - The NVIDIA GPU drivers are installed via **System > Advanced Settings**. -- The GPU device is not currently allocated to another container or VM. -### Configuring Filesystem Devices +TrueNAS does not allow using the same GPU device for a VM and a container, but if the TrueNAS system has multiple GPU devices, one can be allocated to a VM and the other(s) to containers. + +### Configuring File System Devices Use the **Filesystem Devices** card to mount additional host directories or datasets into the container. File system devices provide containers with access to TrueNAS storage for reading and writing data. +Use cases for file system devices: + +- Mounting TrueNAS datasets for persistent container data storage +- Providing containers with access to shared media libraries +- Mounting configuration directories from the host + {{< trueimage src="/images/SCALE/Virtualization/FilesystemDevicesWidget.png" alt="Filesystem Devices Card" id="Filesystem Devices Card" >}} To add a file system device: -File system devices provide containers with access to TrueNAS storage for reading and writing data. + 1. Click **Add** in the **Filesystem Devices** card. {{< trueimage src="/images/SCALE/Virtualization/AddFilesystemDevice.png" alt="Add Filesystem Device" id="Add Filesystem Device" >}} -To add a file system device: + 2. Enter or browse to select the **Host Directory Source**. This is the directory or dataset path on the TrueNAS host that you want to mount into the container. @@ -456,13 +476,6 @@ To add a file system device: To edit or delete an existing file system device, click the more_vert icon and select **Edit** or **Delete**. -Use cases for file system devices: - -- Mounting TrueNAS datasets for persistent container data storage -- Providing containers with access to shared media libraries -- Mounting configuration directories from the host -Use cases for file system devices: - ### Managing NICs Use the **NIC Devices** card to view and manage network interfaces (NICs) attached to the container. @@ -484,10 +497,10 @@ To add a NIC: {{< trueimage src="/images/SCALE/Virtualization/AddContainerNICDevice.png" alt="Add NIC Device" id="Add NIC Device" >}} 3. Configure the NIC settings: - - Use **NIC Type** to select the network interface type (virtio, macvlan, ipvlan, etc.). + - Set **NIC Type** to *VirtIO* or *Intel e82585 (e1000)*. - (Create only) Select **Use Default Mac Address** to automatically assign a MAC address. - - Use **Mac Address** to enter a custom MAC address, or leave empty to use the default. - - (virtio only) Select **Trust Guest RX Filters** to trust guest OS receive filter settings for better performance. + - Enter a custom MAC address in **Mac Address**, or leave empty to use the default. + - (VirtIO only) Select **Trust Guest RX Filters** to trust the guest OS receive filter settings for better performance. Applies only to a VirtIO NIC added from **MACVLAN NICS**. For a NIC from **BRIDGED NICS**, TrueNAS rejects or ignores it. 4. Click **Add** to attach the NIC to the container. To edit or delete an existing NIC: diff --git a/static/images/SCALE/Virtualization/DeleteContainerDialog.png b/static/images/SCALE/Virtualization/DeleteContainerDialog.png new file mode 100644 index 0000000000..ea50983329 Binary files /dev/null and b/static/images/SCALE/Virtualization/DeleteContainerDialog.png differ diff --git a/static/images/SCALE/Virtualization/DeleteItemDialog.png b/static/images/SCALE/Virtualization/DeleteItemDialog.png new file mode 100644 index 0000000000..31d786b146 Binary files /dev/null and b/static/images/SCALE/Virtualization/DeleteItemDialog.png differ diff --git a/static/includes/ContainerStorage.md b/static/includes/ContainerStorage.md new file mode 100644 index 0000000000..ccbb4f750f --- /dev/null +++ b/static/includes/ContainerStorage.md @@ -0,0 +1,16 @@ + + +TrueNAS (27 and later) stores containers in a hidden .truenas_containers dataset on the selected pool. +Each container has its own dataset within .truenas_containers, named after the container, for example *pool*/.truenas_containers/containers/*container_name*. +The .truenas_containers dataset is mounted separately from the pool file system, at /mnt/.truenas_containers/*pool*, to prevent accidental inclusion in SMB or NFS shares. +TrueNAS manages the .truenas_containers dataset internally. +Modifying it directly can cause container instability or data loss. + +Images are stored in *pool*/.truenas_containers/images, next to the containers dataset. + +The dataset is created per pool. The pool used is set by the **Preferred Pool** setting or chosen when you create the container. + +{{< hint type=note title="Containers Created in TrueNAS 25.10" >}} +TrueNAS 25.10 stored containers in .ix-virt. +See [Migrating Containers from TrueNAS 25.10](https://www.truenas.com/docs/scale/27/containers/managingcontainers/#migrating-containers-from-truenas-2510) in the TrueNAS 27 documentation for information on how TrueNAS migrates them. +{{< /hint >}} \ No newline at end of file