Skip to content

Home Assistant in Docker

Medium 20 min Free

Docker is the flexible way to run Home Assistant. Perfect if you already have a server or NAS running.

Docker architecture diagram

  • Have an existing server/NAS
  • Want to run other services (Plex, Nextcloud, etc.)
  • Prefer manual control
  • Already know Docker
  • Are new to Home Assistant
  • Want everything to β€œjust work”
  • Need Add-ons (Zigbee2MQTT, Node-RED, etc.)
  • βœ… Linux server (Ubuntu, Debian, or similar)
  • βœ… Docker installed
  • βœ… Basic terminal knowledge
Terminal window
# Update package list
sudo apt update && sudo apt upgrade -y
# Install Docker with official script
curl -fsSL https://get.docker.com | sh
# Add your user to docker group
sudo usermod -aG docker $USER
# Log out and in again (or run):
newgrp docker
# Verify installation
docker --version
docker compose version
Terminal window
# Create folders
mkdir -p ~/docker/homeassistant/config
cd ~/docker/homeassistant

Your structure:

~/docker/
└── homeassistant/
β”œβ”€β”€ config/ ← All HA files stored here
└── docker-compose.yml

Create the file docker-compose.yml:

docker-compose.yml
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
restart: unless-stopped
privileged: true
network_mode: host
environment:
- TZ=Europe/London
Terminal window
# Start in background
docker compose up -d
# Follow logs (Ctrl+C to stop)
docker compose logs -f homeassistant

Then open: http://YOUR-SERVER-IP:8123

Terminal window
# See status
docker compose ps
# See logs
docker compose logs -f homeassistant
# Restart
docker compose restart homeassistant
# Stop
docker compose down
# Update to latest version
docker compose pull
docker compose up -d
# See resource usage
docker stats homeassistant

If you have a Zigbee USB stick or similar:

  1. Find your device:

    Terminal window
    ls -la /dev/serial/by-id/
  2. Add to docker-compose.yml:

    docker-compose.yml
    services:
    homeassistant:
    container_name: homeassistant
    image: ghcr.io/home-assistant/home-assistant:stable
    volumes:
    - ./config:/config
    - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    network_mode: host
    devices:
    - /dev/ttyACM0:/dev/ttyACM0
  3. Restart container:

    Terminal window
    docker compose down && docker compose up -d
FeatureDocker ContainerHome Assistant OS
Add-ons (Z2M, Node-RED)❌ Run separatelyβœ… Integrated
Supervisor❌ Noβœ… Yes
Auto-backup❌ Manualβœ… Yes
UpdatesManual (pull)βœ… One click
Flexibility⭐⭐⭐⭐⭐

Docker Container has no automatic backup. Do it manually:

Terminal window
# Stop HA first (optional, but safer)
docker compose stop homeassistant
# Backup config folder
tar -czvf homeassistant-backup-$(date +%Y%m%d).tar.gz config/
# Start HA again
docker compose start homeassistant