ioBroker Docker Container mit Redis DB verbinden

Nachdem die Redis Datenbank nun bereit ist, müssen wir dem Docker Container noch mitteilen, dass er in Zukunft seine States dort speichern soll. Die Konfiguration des ioBroker passiert dabei im besten Fall voll automatisch durch das Startup Script des ioBroker Docker Containers. Alles was wir dazu tun müssen ist dem Container die entsprechenden Informationen über die Umgebungsvariablen mitzuteilen. 

Günstig ist es natürlich dies gleich beim Erstellen des Containers mit anzugeben. Läuft euer Container schon, ist es jetzt Zeit diesen zu stoppen. Über den Button „Duplicate/ Edit“ lässt sich nun der Container „bearbeiten“ (letztendlich ist dies aber auch nur das Ersetzen des Containers mit einem Neuen). 

Wie dem auch sei. Wichtig ist die Angabe der folgenden Parameter in den „Advanced container settings“ im Reiter „Env“.

      - IOB_STATESDB_HOST=redis
      - IOB_STATESDB_PORT=6379
      - IOB_STATESDB_TYPE=redis

Nach dem „Deploy the container“ könnt ihr im Log des ioBroker Containers schauen ob die Parameter während des Starts auch wirklich erfolgreich gesetzt werden und der ioBroker (wieder) in Betrieb geht. 

Wenn das alles geklappt hat, dann schreibt euer ioBroker ab sofort die States in die Redis DB.

Alles viel einfacher mit docker-compose aka "Portainer Stacks"

Für alle die die Vorzüge von docker-compose schätzen gibt es im Portainer die Option Container in „Stacks“ zu erstellen. Hierbei werden die Config-Daten zu einem oder mehreren Containern und ggf. Netzwerken in einer entsprechenden Config-Datei (compose file) bereitgestellt.

Das Compose File für dieses Beispiel würde dann wie folgt aussehen. Enthalten sind darin sowohl der ioBroker Container als auch der Redis Datenbank Container und das gemeinsame Bridge Netzwerk. 

version: "2"
services:
  iobroker:
    container_name: iobroker
    image: buanet/iobroker:latest-v5
    hostname: iobroker
    restart: always
    networks:
      internal:
        ipv4_address: 172.18.0.2
    ports:
      - "8081:8081"
    environment:
      - IOB_STATESDB_HOST=redis
      - IOB_STATESDB_PORT=6379
      - IOB_STATESDB_TYPE=redis
    volumes:
      - /volume1/docker/iobroker_data:/opt/iobroker
    depends_on:
      - redis

  redis:
    container_name: redis
    image: redis:latest
    hostname: redis
    restart: always
    networks:
      internal:
        ipv4_address: 172.18.0.3
    ports:
      - "6379:6379"
    volumes:
      - /volume1/docker/redis_data:/data

networks:
  internal:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16
          gateway: 172.18.0.1
          ip_range: 172.18.0.1/24

Achtung

Wenn ihr als Host eine Synology Disk Station nutzt und euch Portainer beim Erstellen eines Stacks mit „bla bla mem_swappiness bla bla“ anmeckert, dann fügt bitte unterhalb der Definition der volumes für den redis-container noch die folgende Definition an: mem_swappiness: -1

Das war’s dann eigentlich auch schon. Wie immer steht euch die Kommentarfunktion für Fragen oder Feedback zur Verfügung.

MfG,
André

Änderungshistorie

2020-12-27

Erste Veröffentlichung