Description: If you are using LXC and want to migrate all or some of your LXC containers to a LXD installation on the same machine, you can use the lxc-to-lxd tool. The LXC containers must exist on the same mac...

Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# How to migrate containers from LXC to LXD

▶ Watch on YouTube

If you are using LXC and want to migrate all or some of your LXC containers to a LXD installation on the same machine, you can use the `lxc-to-lxd` tool. The LXC containers must exist on the same machine as the LXD server.

The tool analyzes the LXC configuration and copies the data and configuration of your existing LXC containers into new LXD containers.

Note

Alternatively, you can use the `lxd-migrate` tool within a LXC container to migrate it to LXD (see How to import physical or virtual machines to LXD instances). However, this tool does not migrate any of the LXC container configuration.

## Get the tool

If you’re using the snap, the `lxc-to-lxd` is automatically installed. It is available as `lxd.lxc-to-lxd`.

Note

The `lxd.lxc-to-lxd` command was last included in the 5.0 snap which should be installed to do the conversion from `lxc` to `lxd`:

        sudo install lxd --channel=5.0/stable
        sudo lxd.lxc-to-lxd --all

After successfully running the `lxd.lxc-to-lxd` command, you can then switch to a newer snap channel if desired, like the latest one:

        sudo refresh lxd --channel=latest/stable

Otherwise, make sure that you have `go` (Go) installed and get the tool with the following command:

    go install github.com/canonical/lxd/lxc-to-lxd@latest

## Prepare your LXC containers

You can migrate one container at a time or all of your LXC containers at the same time.

Note

Migrated containers use the same name as the original containers. You cannot migrate containers with a name that already exists as an instance name in LXD.

Therefore, rename any LXC containers that might cause name conflicts before you start the migration process.

Before you start the migration process, stop the LXC containers that you want to migrate.

## Start the migration process

Run `sudo lxd.lxc-to-lxd [flags]` to migrate the containers. (This command assumes that you are using the snap; otherwise, replace `lxd.lxc-to-lxd` with `lxc-to-lxd`, also in the following examples.)

For example, to migrate all containers:

    sudo lxd.lxc-to-lxd --all

To migrate only the `lxc1` container:

    sudo lxd.lxc-to-lxd --containers lxc1

To migrate two containers (`lxc1` and `lxc2`) and use the `my-storage` storage pool in LXD:

    sudo lxd.lxc-to-lxd --containers lxc1,lxc2 --storage my-storage

To test the migration of all containers without actually running it:

    sudo lxd.lxc-to-lxd --all --dry-run

To migrate all containers but limit the `rsync` bandwidth to 5000 KB/s:

    sudo lxd.lxc-to-lxd --all --rsync-args --bwlimit=5000

Run `sudo lxd.lxc-to-lxd --help` to check all available flags.

Note

If you get an error that the `linux64` architecture isn’t supported, either update the tool to the latest version or change the architecture in the LXC container configuration from `linux64` to either `amd64` or `x86_64`.

## Check the configuration

The tool analyzes the LXC configuration and the configuration of the container (or containers) and migrates as much of the configuration as possible. You will see output similar to the following:

`user@host:~$` `sudo lxd.lxc-to-lxd --containers lxc1`
`Parsing LXC configuration` `Checking for unsupported LXC configuration keys` `Checking for existing containers` `Checking whether container has already been migrated` `Validating whether incomplete AppArmor support is enabled` `Validating whether mounting a minimal /dev is enabled` `Validating container rootfs` `Processing network configuration` `Processing storage configuration` `Processing environment configuration` `Processing container boot configuration` `Processing container apparmor configuration` `Processing container seccomp configuration` `Processing container SELinux configuration` `Processing container capabilities configuration` `Processing container architecture configuration` `Creating container` `Transferring container: lxc1: ...``Container 'lxc1' successfully created`

After the migration process is complete, you can check and, if necessary, update the configuration in LXD before you start the migrated LXD container.