This is my second attempt to run a Cisco image in Containerlab. My first try, about two years ago, ended in frustration, so I stayed with Arista and FRR labs for a while.
The reason turned out to be very simple: I had missed one important note on the Containerlab IOS XRd page. Only the control plane version of IOS XRd is supported.
So the working image is this one:

Once I used the correct image, the rest was surprisingly smooth.
Automation first
I like to automate even small labs, so I built the environment like this:
- Terraform to deploy a remote Ubuntu VM
- Ansible to install required packages and prepare the host
- Ansible again to copy lab topologies and perform basic lab operations
IOS XRd needs an x86 platform, so running the lab on a remote Ubuntu VM worked well for me.
All files are available here: ContainerLab-2026
First lab
Because IOS XRd is aimed at service provider use cases, my first test was a small MPLS topology:

And the corresponding Containerlab topology file looks like this:
name: xrd-lab
topology:
kinds:
cisco_xrd:
image: ios-xr/xrd-control-plane:25.4.1
env:
CLAB_MGMT_VRF: Mgmt-intf
nodes:
P0:
kind: cisco_xrd
mgmt-ipv4: 172.20.20.30
ports:
- "2310:22"
PE1:
kind: cisco_xrd
mgmt-ipv4: 172.20.20.31
ports:
- "2311:22"
PE2:
kind: cisco_xrd
mgmt-ipv4: 172.20.20.32
ports:
- "2312:22"
CE1:
kind: cisco_xrd
mgmt-ipv4: 172.20.20.33
ports:
- "2313:22"
CE2:
kind: cisco_xrd
mgmt-ipv4: 172.20.20.34
ports:
- "2314:22"
RR:
kind: cisco_xrd
mgmt-ipv4: 172.20.20.35
ports:
- "2315:22"
CE3:
kind: cisco_xrd
mgmt-ipv4: 172.20.20.36
ports:
- "2316:22"
links:
- endpoints: ["CE1:Gi0-0-0-0", "PE1:Gi0-0-0-1"]
- endpoints: ["PE1:Gi0-0-0-0", "P0:Gi0-0-0-0"]
- endpoints: ["P0:Gi0-0-0-1", "PE2:Gi0-0-0-0"]
- endpoints: ["PE2:Gi0-0-0-1", "CE2:Gi0-0-0-0"]
- endpoints: ["P0:Gi0-0-0-2", "RR:Gi0-0-0-0"]
- endpoints: ["CE3:Gi0-0-0-0", "PE1:Gi0-0-0-2"]
- endpoints: ["PE1:Gi0-0-0-3", "CE1:Gi0-0-0-1"]
- endpoints: ["PE2:Gi0-0-0-2", "CE2:Gi0-0-0-1"]
That is really all it took to get started. If you are trying IOS XRd in Containerlab for the first time, the main thing to remember is simple: use the control plane image, not the full variant.
For me, that one overlooked detail made the difference between a failed experiment and a very usable Cisco lab.
I love containers and I love also Containerlab now :)