Skip to content

LXD Enrollment Fails

The Enroll LXD Node modal returns an error instead of a green confirmation.

Cannot reach <host>:8443

Cannot reach 192.168.10.56:8443 — Verify LXD is running and listening

The TLS port isn't open / LXD isn't listening:

# On the LXD host
ss -tlnp | grep :8443
# Empty? Then LXD isn't bound. Fix:
lxc config set core.https_address :8443
ss -tlnp | grep :8443    # confirm now bound

Firewall check (Rocky / RHEL):

firewall-cmd --list-ports | grep 8443 || \
firewall-cmd --add-port=8443/tcp --permanent && firewall-cmd --reload

Trust token rejected

LXD trust failed: ... not a valid token

The token from lxc config trust add --name mfcloud is one-shot and short-lived (5 minutes by default). If you took longer than that to paste it, generate a fresh one.

TLS handshake / fingerprint mismatch

[LXD] server fingerprint mismatch — possible MITM or re-installed daemon

The stored lxd_server_fingerprint doesn't match the cert the LXD host is now presenting. Common after:

  • Reinstalling LXD / Incus on the host.
  • Restoring the host from a snapshot.
  • Migrating the LXD database between hosts.

Fix: Containers tab → host row → 🛡 Re-trust clears the pin and re-captures on the next call. Note the new fingerprint in the toast and verify it matches what the host is serving:

# On the LXD host:
openssl x509 -in /var/snap/lxd/common/lxd/server.crt -noout -fingerprint -sha256

If the displayed fingerprint differs from the one in the toast, you have a real MITM or are pointing at the wrong host — investigate, don't blindly re-trust.

Worker side: ModuleNotFoundError: core.lxd

The worker on the LXD host doesn't have core/lxd.py. Run Containers → host row → 🛠 Repair Agent to re-push the module set; this now includes core/lxd.py and core/ssh.py, not just tasks/.

Python 3.9 syntax error on the worker

TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'

Rocky 9 ships Python 3.9, which doesn't support PEP 604 X | None syntax without from __future__ import annotations. If you see this after editing a file under core/ and SFTPing it manually, add the future-import to the top of the file.

See also