Homegear auf docker - erste Schritte

Hier ein Update der config von oben:

  • docker IPv6 Änderungen
  • healthcheck für homegear main Prozess, damit der Container automatisch neu startet falls der Hauptprozess sich beendet (danke an Neuer_User)
  • hinzufügen der port 80, 443 für spätere updates

Anbei ein Beispiel für die ein Docker Compose setup incl. IPv6:
(docker: 20.10.6, docker-compose: 1.29.0) ip6tables erzeugt automatisch die benötigten Filter für IPv6.

/etc/docker/daemon.json:

{
  "debug": false,
  "experimental": true,
  "ipv6": true,
  "ip6tables": true, 
  "bip": "192.168.1.1/24",
  "fixed-cidr-v6": "fd00:0:0:1::/64",
  "dns": ["192.168.178.1"]
}

homegear.yml:

networks:
  homegear:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: br-homegear
    enable_ipv6: true
    ipam:
      config:
      - subnet: 192.168.2.0/24
      - subnet: fd00:0:0:2::/64
      driver: default
    name: homegear
services:
  homegear:
    container_name: homegear
    depends_on:
      mosquitto:
        condition: service_started
    devices:
# Anpassen je nach angeschlossenem Device
    - /dev/ttyAMA0:/dev/ttyAMA0
    - /dev/ttyACM0:/dev/ttyACM0
    environment:
# $(id -u) und $(id -g) müssen von Hand eingetragen werden da docker-compose nicht automatisch auswertet
      HOST_USER_GID: '1000'
      HOST_USER_ID: '1000'
      TZ: Europe/Berlin
    healthcheck:
      test: ps -q `cat /var/run/homegear/homegear.pid` || bash -c 'kill -s 15 -1'
      interval: 10s
      timeout: 5s
      retries: 1
    hostname: homegear
#    image: homegear/homegear:latest
    image: homegear/homegear:testing
    labels:
      docker.group: homegear
    networks:
      homegear: null
    ports:
    - protocol: tcp
      published: 80
      target: 80
    - protocol: tcp
      published: 443
      target: 443
    - protocol: tcp
      published: 2001
      target: 2001
    - protocol: tcp
      published: 2002
      target: 2002
    - protocol: tcp
      published: 2003
      target: 2003
    restart: unless-stopped
    stop_grace_period: 60s
    volumes:
    - /docker/homegear/etc:/etc/homegear:Z
    - /docker/homegear/lib:/var/lib/homegear:Z
    - /docker/homegear/log:/var/log/homegear:Z
    - /sys:/sys:rw
  mosquitto:
    container_name: mosquitto
    environment:
      TZ: Europe/Berlin
    hostname: mosquitto
    image: eclipse-mosquitto:latest
    labels:
      docker.group: homegear
    networks:
      homegear: null
    ports:
    - protocol: tcp
      published: 1883
      target: 1883
    - protocol: tcp
      published: 8883
      target: 8883
    restart: unless-stopped
    volumes:
    - /docker/mosquitto/config:/mosquitto/config:rw
    - /docker/mosquitto/data:/mosquitto/data:rw
    - /docker/mosquitto/log:/mosquitto/log:rw
version: '3'
  • Starten: docker-compose -f homegear.yml up -d
  • Stoppen: docker-compose -f homegear.yml down
  • Logs: docker-compose -f homegear.yml logs -f

/boot/cmdline.txt sollte das folgende beinhalten:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Für IPv6 autoconfiguration sollte /usr/lib/dhcpcd/dhcpcd-hooks/99-sysctl erstellt werden und folgendes beinhalten (eth0 an das benutzte Interface anpassen):

sysctl net.ipv6.conf.eth0.accept_ra=2

Dies ist notwendig damit das Interface nicht nur nach einem Reboot, sondern auch später noch router advertisements empfangen kann.