Migration from Home Assistant OS to Docker or VM?

I, along with a lot of others, have used the supervised install method of running HA for a long time. It’s as close to using home assistant OS as you can get. In the past you could migrate from HA OS to a supervised install without issue. Here’s and old post of someone talking about doing it. The guest VM has be be debian bullseye so that HA doesn’t complain, but your host machine can be windows, macos, linux, whatever. If you haven’t tried a supervised install I’d give it a try.

I appreciate your feedback and some valuable tips, but unfortunately, this still didn’t answer the main subject of my question and this thread - migration. I understand the primary purpose of HA full backup, however, the world went beyond simple restore functionality long ago. Take mobile phones for example. With full backup, you can easily migrate from one device to another. Granted, when changing device manufacturer you will have to tweak a couple of things, provide credentials to your apps again, etc. but if you stick with the same brand the entire process is pretty straightforward and beginner friendly.

I would love to see your compose.yaml

Sure. But be aware that I tend to experiment with settings a lot and maybe my config is not the best one out there. I will post just a part of it as I have a lot of containers, but for some basic setup this should be enough.
docker-compose.yml file

services:
  portainer:
    container_name: portainer
    image: portainer/portainer-ce:latest
    restart: always
    ports:
      - "9000:9000/tcp"
      - "9443:9443/tcp"
    environment:
      - TZ=Europe/Zagreb
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/portainer:/data
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    devices:
      - /dev/serial/by-id/usb-Silicon_Labs_slae.sh_cc2652rb_stick_-_slaesh_s_iot_stuff_00_12_4B_00_23_90_C7_F4-if00-port0
    environment:
      - TZ=Europe/Zagreb
    cap_add:
      - NET_ADMIN
    security_opt:  
      - no-new-privileges
    volumes:
      - /opt/homeassistant/config:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - mosquitto
      - influxdb
    stop_grace_period: 60s
    restart: always
    network_mode: host
### zigbee2mqtt
  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt:latest
    restart: unless-stopped
    volumes:
      - ./zigbee2mqtt/data:/app/data
      - /run/udev:/run/udev:ro
    ports:
      - 8090:8080
    environment:
      - TZ=Europe/Zagreb
    devices:
      # Make sure this matched your adapter location
      - /dev/serial/by-id/usb-Silicon_Labs_slae.sh_cc2652rb_stick_-_slaesh_s_iot_stuff_00_12_4B_00_23_90_C7_F4-if00-port0:/dev/ttyACM0
      # user and group settings
    group_add:
      - dialout
    user: 1001:1001
    depends_on:
      - mosquitto
### esphome
  esphome:
    container_name: esphome
    image: esphome/esphome
    environment:
      - ESPHOME_DASHBOARD_USE_PING=true
    volumes:
      - /opt/esphome/config:/config
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - homeassistant
    restart: always
    privileged: true
    network_mode: host
### frigate
  frigate:
    container_name: frigate
    privileged: false 
    restart: unless-stopped
    image: ghcr.io/blakeblackshear/frigate:stable-tensorrt
    runtime: nvidia
    shm_size: "128mb" # update for your cameras based on calculation above
    devices:
      - /dev/bus/usb:/dev/bus/usb # passes the USB Coral, needs to be modified for other versions
      - /dev/nvidia0
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /opt/frigate/storage:/media
      - /opt/go2rtc:/config:rw
      - /opt/frigate/config/model_cache/tensorrt:/config/model_cache/tensorrt
      - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    ports:
      - "5000:5000"
      - "1935:1935" # RTMP feeds
    environment:
      TZ: Europe/Zagreb
      FRIGATE_RTSP_PASSWORD: "_your_password"
      NVIDIA_VISIBLE_DEVICES: all
      NVIDIA_DRIVER_CAPABILITIES: all
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: [gpu]
    cap_add:
      - NET_ADMIN
### glances
  glances:
    container_name: glances
    image: nicolargo/glances:3.4.0.5
    restart: always
    pid: host
    network_mode: host
    environment:
      - TZ=Europe/Zagreb
      - GLANCES_OPT=-C /etc/glances.conf -w
      - PUID=1001
      - PGID=8123
      - UMASK=007
      - PACKAGES=iputils
    cap_drop: 
      - ALL
    cap_add:
      - CHOWN
      - SETUID
      - SETGID
      - NET_ADMIN
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /run/user/1001/podman/podman.sock:/run/user/1001/podman/podman.sock
      - /opt/glances/conf/glances.conf:/etc/glances.conf
      - /etc/os-release:/etc/os-release:ro
    healthcheck: 
      test: curl --fail http://192.168.8.40:61208/ || exit 1 
      interval: 15s
      timeout: 1m
      retries: 2
### samba
  samba:
    image: crazymax/samba
    container_name: samba
    network_mode: host
    volumes:
      - "/opt/samba/data:/data"
      - "/opt/homeassistant:/opt/homeassistant/"
      - "/opt:/opt/"
      - "/home/daniel:/home/daniel/"
    environment:
      - "BROWSABLE=yes"
      - "SAMBA_WORKGROUP=HASSIO"
    restart: always  
    cap_add:
      - NET_ADMIN
      - NET_RAW
### mosquitto
  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: mosquitto
    environment:
      - TZ=Europe/Zagreb
      - PUID=1883
      - PGID=1883
      - UMASK=007
      - PACKAGES=iputils
    cap_drop: 
      - ALL
    cap_add:
      - CHOWN
      - SETUID
      - SETGID
      - NET_ADMIN
    security_opt:  
      - no-new-privileges
    volumes:
      - /opt/mosquitto:/mosquitto
      - /opt/mosquitto/config:/mosquitto/config:rw
      - /opt/mosquitto/data:/mosquitto/data
      - /opt/mosquitto/log:/mosquitto/log
    ports:
      - 1883:1883
      - 9001:9001   
    restart: unless-stopped
### go2rtc
  go2rtc:
    container_name: go2rtc
    image: alexxit/go2rtc:master-hardware
    network_mode: host
    privileged: true
    environment:
      - TZ=Europe/Zagreb
      - PUID=65534
      - PGID=65534
      - UMASK=007
      - PACKAGES=iputils
    cap_drop: 
      - ALL
    cap_add:
      - CHOWN
      - SETUID
      - SETGID
    healthcheck: 
      test: curl --fail http://192.168.8.40:1984/ || exit 1 
      interval: 15s
      timeout: 1m
      retries: 2
    volumes:
      - /opt/go2rtc:/config
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]