How to Restore Netbird

Hi all,

I’ve running a Netbird with docker compose file.

I’ve made a backup of Netbird as describe in the Docs.

Now I copied everything to a second machine and changed the DNS to the new IP.

After changing the IP I go to the new machine and try to restore the Netbird application.

docker compose up 
docker compose stop
docker compose cp -a backup/dbs/management management:/var/lib/netbird/
docker compose start
docker compose up -d

But Netbird is unable to start.

Log:

zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="initialization started" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/init.go:75"
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify user" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_user.go:39" username=zitadel
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify database" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_database.go:39" database=zitadel
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify grant" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_grant.go:34" database=zitadel user=zitadel
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify zitadel" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_zitadel.go:78" database=zitadel
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify system" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_zitadel.go:39"
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify encryption keys" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_zitadel.go:44"
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify projections" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_zitadel.go:49"
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify eventstore" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_zitadel.go:54"
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify events tables" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_zitadel.go:59"
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify system sequence" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_zitadel.go:64"
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify unique constraints" caller="/home/runner/work/zitadel/zitadel/cmd/initialise/verify_zitadel.go:69"
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="setup started" caller="/home/runner/work/zitadel/zitadel/cmd/setup/setup.go:100"
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify migration" caller="/home/runner/work/zitadel/zitadel/internal/migration/migration.go:43" name=14_events_push
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify migration" caller="/home/runner/work/zitadel/zitadel/internal/migration/migration.go:43" name=01_tables
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify migration" caller="/home/runner/work/zitadel/zitadel/internal/migration/migration.go:43" name=02_assets
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify migration" caller="/home/runner/work/zitadel/zitadel/internal/migration/migration.go:43" name=28_add_search_table
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify migration" caller="/home/runner/work/zitadel/zitadel/internal/migration/migration.go:43" name=31_add_aggregate_index_to_fields
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="verify migration" caller="/home/runner/work/zitadel/zitadel/internal/migration/migration.go:43" name=03_default_instance
zitadel-1     | time="2025-10-09T11:14:49Z" level=info msg="starting migration" caller="/home/runner/work/zitadel/zitadel/internal/migration/migration.go:66" name=03_default_instance
zitadel-1     | time="2025-10-09T11:14:49Z" level=error msg="migration failed" caller="/home/runner/work/zitadel/zitadel/internal/migration/migration.go:68" error="ID=DOMAIN-dv3t5 Message=Errors.AuthNKey.ExpireBeforeNow" name=03_default_instance
zitadel-1     | time="2025-10-09T11:14:49Z" level=fatal msg="migration failed" caller="/home/runner/work/zitadel/zitadel/cmd/setup/setup.go:248" error="ID=DOMAIN-dv3t5 Message=Errors.AuthNKey.ExpireBeforeNow" name=03_default_instance

What is the correct way to backup Netbird and how to restore?

Kind regards,
Sören

I could be mistaken, but the management container needs to be disabled before you cp it.

Sorry you are right, it was a copy paste failure.
I’ve corrected it.

I’m having the same problem. It’s not starting after restore, and the logs still show the old ip. Did you also change something in the restored files?

Hello Cristi,
sorry for the late reply.
I didn’t changed anything.
I see in the logs the new IP but netbird didn’t start.

Kind regards
Sören

I’ve made only a copy paster failure here in the post. But this does not solved my problem!

What version what Netbird when you made the backup and what version are you trying to restore to?

Hi,
sorry for the delay.
Same versions.

I’ve switched to the new system with a new URL and joined all server to the new URL.

But I need a solution in kind of Problems.

What can I do to test?

Kind regards
Sören