Offizielles FHEM Docker Basis Image für verschiedene Plattformen

Begonnen von Loredo, 28 Juli 2018, 21:24:57

Vorheriges Thema - Nächstes Thema

rob

Zitat von: ch.eick am 14 April 2025, 15:00:50...
Leider ist es nach einem Restart von Conrainer dann wieder weg.
...
Hi Christian.

Da komme ich noch nicht ganz mit. Startest Du den Container mit der Option remove (docker run --rm ... o.ä.)?
Wenn Du den Container normal am Laufen hast, kannst in Du den einsteigen z.B. via
docker exec -it fhem /bin/bash
Dann führst Du den apt install Krams aus. Fhem sollte unbehelligt währenddessen laufen.
Dann kannst mit exit den Container verlassen. Wechselst nach Fhem rüber und machst entweder reload ... oder shutdown restart.

Der Container sollte dabei nicht beendet werden und auch nicht gelöscht. Alles was Du im laufenden Container treibst, bleibt sogar nach stop/ restart erhalten. Außer Du führst automatisch oder manuell ein remove aus - dann ist natürlich alles weg.

Wie genau schaut denn Deine Startanweisung aus? Vermutlich compose?

VG
rob

ch.eick

#2191
Zitat von: rob am 14 April 2025, 15:14:23Da komme ich noch nicht ganz mit. Startest Du den Container mit der Option remove (docker run --rm ... o.ä.)?
Wenn Du den Container normal am Laufen hast, kannst in Du den einsteigen z.B. via
docker exec -it fhem /bin/bash
Dann führst Du den apt install Krams aus. Fhem sollte unbehelligt währenddessen laufen.
Dann kannst mit exit den Container verlassen. Wechselst nach Fhem rüber und machst entweder reload ... oder shutdown restart.

Der Container sollte dabei nicht beendet werden und auch nicht gelöscht. Alles was Du im laufenden Container treibst, bleibt sogar nach stop/ restart erhalten. Außer Du führst automatisch oder manuell ein remove aus - dann ist natürlich alles weg.

Wie genau schaut denn Deine Startanweisung aus? Vermutlich compose?

Ich verwende docker-compose
Damit ist der Ablauf
- docker pull fhem/fhem:latest (oder auch die anderen container, die aktualisiert werden sollen)
- docker-compose up -d
Nun sind alle Container wieder aktuell und verwenden das letzte Image

Anschließend musste ich noch einige wenige apt-get im Container ausführen. Danach wurde der Container beim Neustart immer wieder mit alle Paketen gestartet.
Die Definition in der docker-compose.yaml
    environment:
      PIP_PKGS: "vallox_websocket_api fhem beautifulsoup4 pandas pymysql sqlalchemy sklearn sklearn-lib"
      CPAN_PKGS: "Crypt::OpenSSL::AES XML::Bare XML::Bare Protocol::WebSocket::Handshake::Server Crypt::Rijndael Crypt::Random --verbose"
hat mir dabei bereits alles mögliche abgenommen, nur das apt-get habe ich dort nicht hinbekommen.

Bei meinem jetzigen Wechsel auf den RPI5 wäre es natürlich super, alles direkt docker conform hinzubekommen. Es kann ja auch sein, dass mein CPAN_PKGS bereits überflüssig geworden ist, was ich aber noch nicht weiß.

Innerhalb des Containers klappt ein
root@raspberrypi:/opt/fhem# cpan PBKDF2::Tiny
mit anschließendem fhem restart und einem reload 99_myUtils.pm
Leider scheint das nach einem Container stop/start im Portainer dann wieder weg zu sein.   <== Das scheint dann jetzt doch zu klappen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

rob

Zitat von: ch.eick am 14 April 2025, 15:32:38...
Innerhalb des Containers klappt ein
root@raspberrypi:/opt/fhem# cpan PBKDF2::Tiny
mit anschließendem fhem restart und einem reload 99_myUtils.pm
Leider scheint das nach einem Container stop/start im Portainer dann wieder weg zu sein.
OK, manuell klappt es also. Jetzt fehlt noch die Automatik(?). War mir nicht bewusst, dass Du Portainer im Einsatz hast - vielleicht gibt es da eine Option, die wie remove wirkt (weiß ich nicht).

Schau mal bitte in diesen Beispielen https://github.com/fhem/fhem-docker/blob/dev/docker-compose.yml ab Zeile 135. Dort werden Packages mit apt installiert (per inline build). Vielleicht wäre das eine gangbare Alternative.
Sollte auch via Portainer klappen (hab ich selber nicht, ist m.E. aber auch nur eine andere "Startrampe").

passibe

Zitat von: ch.eick am 14 April 2025, 15:32:38    environment:
      PIP_PKGS: "vallox_websocket_api fhem beautifulsoup4"
      CPAN_PKGS: "Crypt::OpenSSL::AES XML::Bare XML::Bare Protocol::WebSocket::Handshake::Server Crypt::Rijndael Crypt::Random --verbose"
Nachinstallieren über die XY_PKGS-Env-Variablen geht schon seit Version 4 nicht mehr. Siehe die Doku: https://github.com/fhem/fhem-docker?tab=readme-ov-file#since-version-4

Wie @rob schon gesagt hat, musst du dir im compose file ein kleines Dockerfile snippet einbauen, das dir temporär ein eigenes Image inklusive der zusätzlichen Pakete baut.

Sidey

Zitat von: ch.eick am 14 April 2025, 15:32:38Es kann ja auch sein, dass mein CPAN_PKGS bereits überflüssig geworden ist, was ich aber noch nicht weiß.

Für das Image 5.1.0 kannst Du hier nachlesen was installiert ist:

https://github.com/fhem/fhem-docker/actions/runs/1413662334

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

ch.eick

Zitat von: Sidey am 14 April 2025, 16:28:52Für das Image 5.1.0 kannst Du hier nachlesen was installiert ist:

https://github.com/fhem/fhem-docker/actions/runs/1413662334
Das gibt einen 404 :-)

Wie müsste ich das denn dann jetzt richtig implementieren?
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Zitat von: passibe am 14 April 2025, 16:24:53Nachinstallieren über die XY_PKGS-Env-Variablen geht schon seit Version 4 nicht mehr. Siehe die Doku: https://github.com/fhem/fhem-docker?tab=readme-ov-file#since-version-4

Wie @rob schon gesagt hat, musst du dir im compose file ein kleines Dockerfile snippet einbauen, das dir temporär ein eigenes Image inklusive der zusätzlichen Pakete baut.
Hmm, wenn das mal nicht meine Kentnisse übersteigt
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

passibe

Die Beispiele in der docker-compose.yml im Repo sind recht umfangreich, d.h. für jeden Anwendungsfall (du brauchst ja nur PIP und CPAN) ist was dort. Im Prinzip musst du nur deine aktuellen Pakete an der richtigen Stelle in die Befehle reinkopieren. Wenn du Schwierigkeiten hast, poste einfach mal deinen Versuch der compose file hier, dann kriegen wir das schon hin.

ch.eick

Zitat von: rob am 14 April 2025, 15:51:15
Zitat von: ch.eick am 14 April 2025, 15:32:38...
Innerhalb des Containers klappt ein
root@raspberrypi:/opt/fhem# cpan PBKDF2::Tiny
mit anschließendem fhem restart und einem reload 99_myUtils.pm
Leider scheint das nach einem Container stop/start im Portainer dann wieder weg zu sein.
Schau mal bitte in diesen Beispielen https://github.com/fhem/fhem-docker/blob/dev/docker-compose.yml ab Zeile 135. Dort werden Packages mit apt installiert (per inline build). Vielleicht wäre das eine gangbare Alternative.
Sollte auch via Portainer klappen (hab ich selber nicht, ist m.E. aber auch nur eine andere "Startrampe").
Das schau ich mir mal an
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#2200
Zitat von: passibe am 14 April 2025, 16:53:56Die Beispiele in der docker-compose.yml im Repo sind recht umfangreich, d.h. für jeden Anwendungsfall (du brauchst ja nur PIP und CPAN) ist was dort. Im Prinzip musst du nur deine aktuellen Pakete an der richtigen Stelle in die Befehle reinkopieren. Wenn du Schwierigkeiten hast, poste einfach mal deinen Versuch der compose file hier, dann kriegen wir das schon hin.
Hey,
ich bin ja lernwillig :-)

Hier kommt der erste Versuch, mit Fehler
root@raspberrypi:/docker/fhem_2025# cat docker-compose.yml
# This is an exmaple Docker Compose file to start your own Docker Stack

version: '3.3'

volumes:
  portainer_data:


services:

  fhem:
#    image: fhem/fhem:latest
#    image: fhem/fhem:5.0.0-bookworm

# PIP_PKGS: "vallox_websocket_api fhem beautifulsoup4 pandas pymysql sqlalchemy sklearn sklearn-lib"
# CPAN_PKGS: "Crypt::OpenSSL::AES XML::Bare XML::Bare Protocol::WebSocket::Handshake::Server Crypt::Rijndael Crypt::Random --verbose"

    build:
      context: .
      dockerfile_inline: |
#        FROM ghcr.io/fhem/fhem-docker:5-bookworm
        FROM ghcr.io/fhem/fhem-docker:latest
        RUN <<EOF
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get update
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends python3-pandas python3-pymysql python3-sqlalchemy python3-sklearn python3-sklearn-lib
          LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends libcrypt-rijndael-perl
          LC_ALL=C apt-get autoremove -qqy && LC_ALL=C apt-get clean
          pip3 install --no-cache-dir vallox_websocket_api fhem beautifulsoup4 pandas pymysql sqlalchemy sklearn sklearn-lib
       EOF
    pull_policy: build

    restart: always
    network_mode: host
    privileged: true
#    devices:
#      - "/dev/ttyACM0:/dev/ttyACM0"
    volumes:
      - "./fhem/:/opt/fhem/"
#      - "./fhem/contrib/configDB/configDB.conf:/opt/fhem/configDB.conf"
    environment:
      FHEM_UID: 6061
      FHEM_GID: 6061
      TIMEOUT: 10
      RESTART: 1
      TELNETPORT: 7072
      TZ: Europe/Berlin
#      CONFIGTYPE: configDB
    depends_on:
      - "mysql"

< snip >

Und hier der Fehler
root@raspberrypi:/docker/fhem_2025# docker-compose up -d
ERROR: yaml.parser.ParserError: while parsing a block mapping
  in "./docker-compose.yml", line 19, column 7
expected <block end>, but found '<scalar>'
  in "./docker-compose.yml", line 22, column 9
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

rob

Bei yaml muss man peinlichst auf die Einrückungen achten. Leider sieht man die Zeilennummern nicht.
Schau mal bitte ob die Einrückungen wirklich alle Spaces sind und keine anderweitigen Dinge wie Tabulator oder so. EOF könnte noch ein Space vertragen, wenn ich das richtig sehe. Und ggf. muss da nur "FROM ghcr.io/fhem/fhem-docker" stehen, also ohne latest.
Geht jetzt wahrscheinlich nur step by step die Ursache zu finden  ;)

VG
rob

ch.eick

Zitat von: rob am 14 April 2025, 18:05:24Bei yaml muss man peinlichst auf die Einrückungen achten. Leider sieht man die Zeilennummern nicht.
Schau mal bitte ob die Einrückungen wirklich alle Spaces sind und keine anderweitigen Dinge wie Tabulator oder so. EOF könnte noch ein Space vertragen, wenn ich das richtig sehe. Und ggf. muss da nur "FROM ghcr.io/fhem/fhem-docker" stehen, also ohne latest.
Geht jetzt wahrscheinlich nur step by step die Ursache zu finden  ;)

VG
rob
Hi Rob
das mit den Einrückungen hatte ich schon geprüft, es sind jeweils zwei Blank mehr.
Der Fehler kommt immer exact bei Zeile 19 Spalte 7, was der Anfang vom Wort "dockerfile_inline: |" ist.

Nach dem Einrücken von RUN um zwei weitere Blanks kommt nun diese Meldung
root@raspberrypi:/docker/fhem_2025# docker-compose up -d
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.fhem.build contains unsupported option: 'dockerfile_inline'
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Sidey

Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Sidey

Zitat von: ch.eick am 14 April 2025, 18:13:44Nach dem Einrücken von RUN um zwei weitere Blanks kommt nun diese Meldung
root@raspberrypi:/docker/fhem_2025# docker-compose up -d
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.fhem.build contains unsupported option: 'dockerfile_inline'

Deine docker-compose Version ist zu alt.
Ich dachte Du verwendest portainer. Da habe ich deine Konfig gerade mal eingefügt und er hat mir ein Image erzeugt:

 
  fhem:
    #image: ghcr.io/fhem/fhem-docker:5-bookworm
    #image: ghcr.io/fhem/fhem-minimal-docker:4-bullseye
    build:
      dockerfile_inline: |
           FROM ghcr.io/fhem/fhem-minimal-docker:5-bookworm
           RUN <<EOF
            LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get update
            LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends python3-pandas python3-pymysql python3-sqlalchemy python3-sklearn python3-sklearn-lib
            LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -qqy --no-install-recommends libcrypt-rijndael-perl
            LC_ALL=C apt-get autoremove -qqy && LC_ALL=C apt-get clean
           EOF
    pull_policy: build
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker