Incus¶
In this article
- Incus. Key Features
- Deployment Features
- Getting Started After Deploying Incus
- Initial Infrastructure Setup
- Creating and Managing Containers
- Managing Container Configuration
- Working with Snapshots and Migration
- Managing Images
- Network Interaction
- Storage Management
- Configuring NAT and Routing
- Ordering a Server with Incus using API
Information
Incus is an open-source system container and virtual machine manager. It is a fork of LXD and provides a simple yet powerful tool for managing Linux containers and virtual machines on a unified platform.
Incus. Key Features¶
- Container and VM Management: Incus allows running Linux system containers and full-fledged QEMU/KVM virtual machines through a single interface.
- Process Isolation: Containers operate in an isolated environment with their own file systems, network interfaces, and processes.
- Network Capabilities: Built-in support for various types of networks - bridges, NAT, VLANs, overlay networks for containers.
- Storage Management: Flexible storage pool system supporting different backends - dir, btrfs, ZFS, LVM.
- Snapshots and Migration: Creation of container state snapshots, live migration between hosts without stopping services.
- Configuration Profiles: Reusable profiles for quick deployment of containers with predefined parameters.
- Resource Limitation: Precise control over CPU, memory, disk I/O, and network bandwidth for each container.
- REST API: Full-featured HTTP API for automation and integration with external systems.
- Web Interface: Built-in web management panel for visual infrastructure control.
- Image Library: Access to an extensive collection of ready-made images of various Linux distributions.
- Clustering: Ability to combine multiple hosts into a single cluster for distributed management.
Deployment Features¶
| ID | Compatible OS | VM | BM | VGPU | GPU | Min CPU (Cores) | Min RAM (Gb) | Min HDD/SDD (Gb) | Active |
|---|---|---|---|---|---|---|---|---|---|
| 234 | Debian 13 | + | + | + | + | 2 | 2 | 50 | ORDER |
Main Incus Paths and Files:
- Primary Configuration File:
/etc/default/incus - Data Directory:
/var/lib/incus - Storage Pools:
/var/lib/incus/storage-pools/ - Containers:
/var/lib/incus/containers/ - Images:
/var/lib/incus/images/ - Log File:
/var/log/incus/incusd.log - System Services:
/usr/lib/systemd/system/incus*.service - Sysctl Configuration:
/etc/sysctl.d/50-incus.conf - User Configuration:
/root/.config/incus/
Note
Unless otherwise specified, we install the latest release version of the software from the developer's site or operating system repositories by default.
Getting Started After Deploying Incus¶
After payment, an email notification will be sent to the address specified at registration indicating that the server is ready for operation. It will include the VPS IP address and credentials for access. Our company's clients manage equipment through the Server Management Panel and API — Invapi.
Authentication data can be found either in the Info >> Tags tab of the server management panel or in the sent email:
- Link to Access the Incus Web Interface: in tag webpanel (port 8443, HTTPS)
Important
To access the web interface, you must use HTTPS and accept the self-signed certificate in your browser.
When first accessing the Incus web interface, the browser will warn about an insecure connection due to the self-signed certificate. You must accept the certificate to continue:

After accepting the certificate, the login page will open. Click the Login with TLS button to start the authentication process:

The system will redirect you to the page for adding an existing certificate:

Select the Trust token tab and follow the instructions:
-
In the server terminal, execute the command to generate a token:
-
The system will generate a token that needs to be copied:

-
Paste the obtained token into the corresponding text field on the authentication page and click
Import.
After successful authentication, the main web interface page with the list of instances will open.
Creating a New Container via Web Interface¶
To create a new container, click the Create instance button in the upper right corner of the interface:

An instance creation form with several configuration sections will open. To select a base image, click the Browse images button. An image selection window with filters by distribution, release, variant, architecture, and type will open:

The following configuration sections are available:
- Main configuration — basic container parameters: name, description, instance type (container or virtual machine), base image, and assigned profiles;
- Devices — container device management:
- Disk — disk device and mount point configuration;
- Network — network interface configuration;
- GPU — connecting graphic accelerators;
- Proxy — port forwarding configuration between host and container;
- Other — additional device types;
- Resource limits — resource limitation: processor (CPU), RAM, disk I/O operations;
- Security policies — security policies: isolation configuration, privileges, and security profiles (AppArmor, SELinux);
- Snapshots — container state snapshot management for backup and recovery;
- Migration — container migration parameters between hosts;
- Boot — boot settings: boot device order, autostart on system startup;
- Cloud init — automatic container initialization configuration via cloud-init (users, network, packages, scripts).
Select the desired image by clicking the Select button next to it:

After selecting an image, fill in the basic parameters:

- Instance name — container name;
- Description — description (optional);
- Instance type — instance type (Container or Virtual Machine);
- Profiles — configuration profiles.
To start the container immediately after creation, click Create and start. To create without starting, use the Create button.
Container Status Monitoring¶
During container deployment, the image download progress is displayed. The "Setting up" status with download progress indication shows the current instance creation progress. After installation is complete, the status will change to "Running" with a green indicator:

Service Management¶
Checking status:
Restarting service:
Stopping service:
Starting service:
Viewing logs:
Initial Infrastructure Setup¶
After server deployment, it is recommended to perform initial Incus infrastructure setup.
Creating a Storage Pool¶
A storage pool defines where container data will be stored:
Checking created storage pools:
To view detailed information about a pool:
Network Configuration¶
Creating a NAT bridge for containers with automatic IPv4 addressing:
Checking network settings:
Viewing network configuration:
Configuring the Default Profile¶
The default profile defines the basic configuration for new containers. Adding a root disk to the profile:
Adding a network interface to the profile:
Checking profile configuration:
Creating and Managing Containers¶
Creating a Container¶
Example of creating a Debian 12 container with resource limits:
Command parameters:
images:debian/12- image from public repositorydeb12- container name--profile default- using default profile-c limits.cpu=2- limit to 2 CPU cores-c limits.memory=2GiB- memory limit of 2 GB
Viewing Containers¶
List of all instances:
The output will contain information about status, IP addresses, and type of each container.
Managing Container State¶
Starting a container:
Stopping a container:
Restarting a container:
Deleting a container (requires stopping):
Force deleting a running container:
Container Access¶
Connecting via bash:
Connecting to TTY console:
To exit the console, use the key combination Ctrl+a q.
Port Forwarding¶
To access services inside a container from an external network, port forwarding is used through a proxy device:
This command forwards host port 8080 to container port 80.
Example for multiple ports:
HTTP:
HTTPS:
SSH:
Managing Container Configuration¶
Viewing Configuration¶
Viewing full expanded container configuration:
Viewing basic configuration without profiles:
Changing Parameters¶
Setting configuration parameters:
CPU limitation:
Memory limitation:
Disk I/O limitation:
Container autostart:
Adding Devices¶
General syntax for adding devices:
Examples:
Adding an additional disk:
Adding an additional network interface:
Mounting a host directory in a container:
Removing a device:
Working with Snapshots and Migration¶
Creating Snapshots¶
Snapshots allow saving container state for subsequent recovery:
Example:
List of container snapshots:
Restoring from a Snapshot¶
Example:
Deleting a snapshot:
Renaming and Copying¶
Renaming a container:
Copying a container on the same host:
Copying a container to another Incus host:
To work with remote hosts, you must first add a remote:
Managing Images¶
Viewing Images¶
List of local images:
List of images in remote repository:
Searching for a specific distribution:
Copying Images¶
Copying an image from public repository with auto-update:
Copying an image with alias:
Creating an Image from a Container¶
Deleting Images¶
or by alias:
Network Interaction¶
Network Management¶
List of networks:
Viewing network configuration:
Creating a new network:
# Creating a bridge network
incus network create mybr0 \
ipv4.address=10.10.10.1/24 \
ipv4.nat=true \
ipv6.address=none
# Creating a macvlan network
incus network create mymacvlan \
type=macvlan \
parent=eth0
Editing a network:
Deleting a network:
Network Forwarding Rules¶
Creating a forwarding rule for port forwarding:
Storage Management¶
Managing Storage Pools¶
List of pools:
Viewing pool information:
Creating a storage pool:
Dir-based pool:
Btrfs pool:
ZFS pool:
Editing a pool:
Deleting a pool:
Managing Volumes¶
Creating a custom volume:
List of volumes in a pool:
Attaching a volume to a container:
incus config device add <container> <device-name> disk \
pool=<pool-name> \
source=<volume-name> \
path=/mount/path
Copying a volume:
Deleting a volume:
Configuring NAT and Routing¶
In some cases, manual NAT and routing rule configuration may be required to provide container network access to the external network.
Switching to nftables¶
Enabling IP forwarding¶
For permanent application, add to /etc/sysctl.conf:
Restarting Incus after changes:
Configuring NAT Table¶
Creating NAT table and POSTROUTING chain:
Adding masquerade rule for container subnet:
Note
Replace ens1 with your external network interface name and 10.1.4.0/24 with your Incus bridge subnet.
Configuring FORWARD Chain¶
Creating filter table and FORWARD chain:
Adding rules to allow traffic:
Allow traffic from containers outward:
Allow established/related traffic back:
nft insert rule ip filter FORWARD iifname "ens1" oifname "incusbr0" ct state established,related accept
Checking nftables Rules¶
Viewing all rules:
Saving rules (for Debian/Ubuntu):
Installing package for saving rules:
Saving current rules:
Enabling autoload:
Note
Detailed information on all Incus capabilities is contained in the official developer documentation.
Ordering a Server with Incus using API¶
To install this software using the API, follow these instructions.
Some of the content on this page was created or translated using AI.