Installation on Docker


Installation with Docker is straightforward. Adjust the following command so that /path/to/your/config/ points at the folder where you want to store your configuration and run it:

Linux

$ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant

Raspberry Pi 3 (Raspbian)

$ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/raspberrypi3-homeassistant:0.XX.x

The Docker container for Raspberry Pi 3 does not have a ‘latest’ tag so the version number must be specified explicitly, i.e. 0.68.0. This goes for both CLI and Docker Compose.

macOS

When using docker-ce (or boot2docker) on macOS, you are unable to map the local timezone to your Docker container (Docker issue). Instead of -v /etc/localtime:/etc/localtime:ro, just pass in the timezone environment variable when you launch the container, e.g, -e "TZ=America/Los_Angeles". Replace “America/Los_Angeles” with your timezone.

If you wish to browse directly to http://localhost:8123 from your macOS host, meaning forward ports directly to the container, replace the --net=host switch with -p 8123:8123. More detail can be found in the docker forums.

$ docker run -d --name="home-assistant" -v /path/to/your/config:/config -e "TZ=America/Los_Angeles" -p 8123:8123 homeassistant/home-assistant

Alternatively, docker-compose works with any recent release of docker-ce on macOS. Note that (further down this page) we provide an example docker-compose.yml however it differs from the docker run example above. To make the .yml directives match, you would need to make two changes: first add the equivalent ports: directive, then remove the network_mode: host section. This is because Port mapping is incompatible with network_mode: host:. More details can be found at Docker networking docs. Note also the /dev/tty* device name used by your Arduino etc. devices will differ from the Linux example, so the compose mount: may require updates.

Windows

When running Home Assistant in Docker on Windows, you may have some difficulty getting ports to map for routing (since the --net=host switch actually applies to the hypervisor’s network interface). To get around this, you will need to add port proxy ipv4 rules to your local Windows machine, like so (Replacing ‘192.168.1.10’ with whatever your Windows IP is, and ‘10.0.50.2’ with whatever your Docker container’s IP is):

netsh interface portproxy add v4tov4 listenaddress=192.168.1.10 listenport=8123 connectaddress=10.0.50.2 connectport=8123
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8123 connectaddress=10.0.50.2 connectport=8123

This will let you access your Home Assistant portal from http://localhost:8123, and if you forward port 8123 on your router to your machine IP, the traffic will be forwarded on through to the docker container.

Synology NAS

As Synology within DSM now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatibility-information, if your NAS is supported), see https://www.synology.com/en-us/dsm/app_packages/Docker

The steps would be:

  • Install “Docker” package on your Synology NAS
  • Launch Docker-app and move to “Registry”-section
  • Find “homeassistant/home-assistant” within registry and click on “Download”. Choose the “latest” tag, this will make verison updates easier later on.
  • Wait for some time until your NAS has pulled the image
  • Move to the “Image”-section of the Docker-app
  • Click on “Launch”
  • Choose a container-name you want (e.g., “homeassistant”)
  • Click on “Advanced Settings”
  • Set “Enable auto-restart” if you like
  • Within “Volume” click on “Add Folder” and choose either an existing folder or add a new folder. The “mount path” has to be “/config”, so that Home Assistant will use it for the configs and logs.
  • Within “Network” select “Use same network as Docker Host”
  • To ensure that Home Assistant displays the correct timezone go to the “Environment” tab and click the plus sign then add variable = TZ & value = Europe/London choosing your correct timezone
  • Confirm the “Advanced Settings”
  • Click on “Next” and then “Apply”
  • Your Home Assistant within Docker should now run and will serve the web interface from port 8123 on your Docker host (this will be your Synology NAS IP address - for example http://192.168.1.10:8123)

Remark: to update your Home Assistant on your Docker within Synology NAS, you just have to do the following:

  • Go to the Docker-app and move to “Registry”-section
  • Find “homeassistant/home-assistant” within registry and click on “Download”. Choose the “latest” tag, this will overwrite your current image to the latest version.
  • Wait until the system-message/-notification comes up, that the download is finished (there is no progress bar)
  • Move to “Container”-section
  • Stop your container if it’s running
  • Right-click on it and select “Action”->”Clear”. You won’t lose any data, as all files are stored in your config-directory
  • Start the container again - it will then boot up with the new Home Assistant image

Remark: to restart your Home Assistant within Synology NAS, you just have to do the following:

  • Go to the Docker-app and move to “Container”-section
  • Right-click on it and select “Action”->”Restart”.

If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assistant on Synology Docker these instructions do not correctly configure the container to access the USB devices. To configure these devices on your Synology Docker Home Assistant you can follow the instructions provided here by Phil Hawthorne.

QNAP NAS

As QNAP within QTS now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatibility-information, if your NAS is supported), see https://www.qnap.com/solution/container_station/en/index.php

The steps would be:

  • Install “Container Station” package on your Qnap NAS
  • Launch Container Station and move to “Create Container”-section
  • Search image “homeassistant/home-assistant” with Docker hub and click on “Install”
  • Choose “latest” version and click next
  • Choose a container-name you want (e.g., “homeassistant”)
  • Click on “Advanced Settings”
  • Within “Shared Folders” click on “Volume from host” > “Add” and choose either an existing folder or add a new folder. The “mount point has to be /config, so that Home Assistant will use it for the configuration and logs.
  • Within “Network” and select Network Mode to “Host”
  • To ensure that Home Assistant displays the correct timezone go to the “Environment” tab and click the plus sign then add variable = TZ & value = Europe/London choosing your correct timezone
  • Click on “Create”
  • Wait for some time until your NAS has created the container
  • Your Home Assistant within Docker should now run and will serve the web interface from port 8123 on your Docker host (this will be your Qnap NAS IP address - for example http://192.xxx.xxx.xxx:8123)

Remark: To update your Home Assistant on your Docker within Qnap NAS, you just remove container and image and do steps again (Don’t remove “config” folder).

If you want to use a USB Bluetooth adapter or Z-Wave USB stick with Home Assistant on Qnap Docker, follow those steps:

Z-Wave

  • Connect to your NAS over SSH
  • Load cdc-acm kernel module(when nas restart need to run this command) insmod /usr/local/modules/cdc-acm.ko
  • Find USB devices attached. Type command: ls /dev/tty* The above command should show you any USB devices plugged into your NAS. If you have more than one, you may get multiple items returned. Like : ttyACM0

  • Run Docker command: docker run --name home-assistant --net=host --privileged -itd -v /share/CACHEDEV1_DATA/Public/homeassistant/config:/config -e variable=TZ -e value=Europe/London --device /dev/ttyACM0 homeassistant/home-assistant

    -v is your config path -e is set timezone

  • Edit configuration.yaml
zwave:
  usb_path: /dev/ttyACM0

That will tell Home Assistant where to look for our Z-wave radio.

Bluetooth

  • Connect to your NAS over SSH
  • Run Docker command: docker run --name home-assistant --net=host --privileged -itd -v /share/CACHEDEV1_DATA/Public/homeassistant/config:/config -e variable=TZ -e value=Europe/London -v /dev/bus/usb:/dev/bus/usb -v /var/run/dbus:/var/run/dbus homeassistant/home-assistant

    First -v is your config path -e is set timezone

  • Edit the configuration.yaml file
device_tracker:
  - platform: bluetooth_tracker

Restart

If you change the configuration you have to restart the server. To do that you have 2 options.

  1. You can go to the service developer tool icon service developer tools, select the service homeassistant/restart and click “Call Service”.
  2. Or you can restart it from a terminal by running docker restart home-assistant

Docker Compose

As the docker command becomes more complex, switching to docker-compose can be preferable and support automatically restarting on failure or system restart. Create a docker-compose.yml file:

  version: '3'
  services:
    homeassistant:
      container_name: home-assistant
      image: homeassistant/home-assistant
      volumes:
        - /path/to/your/config:/config
        - /etc/localtime:/etc/localtime:ro
      restart: always
      network_mode: host

Then start the container with:

$ docker-compose up -d

To restart Home Assistant when you have changed configuration:

$ docker-compose restart

Exposing Devices

In order to use Z-Wave, ZigBbee or other components that require access to devices, you need to map the appropriate device into the container. Ensure the user that is running the container has the correct privileges to access the /dev/tty* file, then add the device mapping to your docker command:

$ docker run -d --name="home-assistant" -v /path/to/your/config:/config \
   -v /etc/localtime:/etc/localtime:ro --device /dev/ttyUSB0:/dev/ttyUSB0 \
   --net=host homeassistant/home-assistant

or in a docker-compose.yml file:

  version: '3'
  services:
    homeassistant:
      container_name: home-assistant
      image: homeassistant/home-assistant
      volumes:
        - /path/to/your/config:/config
        - /etc/localtime:/etc/localtime:ro
      devices:
        - /dev/ttyUSB0:/dev/ttyUSB0
        - /dev/ttyUSB1:/dev/ttyUSB1
        - /dev/ttyACM0:/dev/ttyACM0
      restart: always
      network_mode: host