FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ch.eick am 09 November 2020, 19:04:58

Titel: Docker - Netzwerke Host/Bridge - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 09 November 2020, 19:04:58
Hallo zusammen,
ich schaffe es einfach nicht zwei container mit jeweils mysql zu starten :-(
Der zweite container meckert immer, dass der port 3306 belegt ist, obwohl ich mit Port bereites alle Varianten durchgetestet habe.
Jedes mysql für sich mit den gleichen ports und expose kann zum Testen gestartet werden und läuft soweit auch.

Wer könnte mir mal bitte expose und ports erklären und ein lauffähiges Beispiel geben, damit ich beide Datenbanken gleichzeitig starten kann?

Viele Grüße
     Christian

Dieser ist der aktuell laufende container, es sind noch weitere container mit in dieser docker-compose.yml , die ich jetzt weg gelassen haben.

version: '3.3'

networks:
  net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.27.0.0/24

services:

  mysql:
    image: hypriot/rpi-mysql
    restart: always
    network_mode: host
    expose:
        - "3306"
        - "33060"
    ports:
        - "3306:3306"
        - "33060:33060"
    volumes:
        - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql
        - ./mysql/data:/var/lib/mysql
        - ./mysql/log:/var/log
        - ./mysql/mycustom.cnf:/etc/mysql/conf.d/custom.cnf
    environment:
        - MYSQL_ROOT_PASSWORD=xxxxx
        - MYSQL_DATABASE=fhem
        - MYSQL_USER=fhemuser
        - MYSQL_PASSWORD=xxxxx


Hier kann ich bei ports und expose angeben was ich will, es kommt immer post 3306 bereits belegt

version: '3.3'

networks:
  net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.27.0.0/24

services:

  mysql:
    image: hypriot/rpi-mysql
    restart: always
    network_mode: host
    expose:
        - '3306'
        - '33060'
    ports:
        - '3306:3307'
        - '33060:33070'
    volumes:
        - ./mysql/init.sql:/docker-entrypoint-initdb.d/fhem-init.sql
        - ./mysql/data:/var/lib/mysql
        - ./mysql/log:/var/log
        - ./mysql/mycustom.cnf:/etc/mysql/conf.d/custom.cnf
    environment:
        - MYSQL_ROOT_PASSWORD=xxxxx
        - MYSQL_DATABASE=fhem
        - MYSQL_USER=fhemuser
        - MYSQL_PASSWORD=xxxxx



Und hier noch die Meldungen

docker-compose up
WARNING: Some networks were defined but are not used by any service: net
Recreating fhem_2021_mysql_1 ... done
Attaching to fhem_2021_mysql_1
mysql_1  | 201109 16:44:30 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
mysql_1  | 201109 16:44:30 [Note] mysqld (mysqld 5.5.60-0+deb7u1) starting as process 1 ...
mysql_1  | 201109 16:44:30 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
mysql_1  | 201109 16:44:30 [Note] Plugin 'FEDERATED' is disabled.
mysql_1  | 201109 16:44:30 InnoDB: The InnoDB memory heap is disabled
mysql_1  | 201109 16:44:30 InnoDB: Mutexes and rw_locks use GCC atomic builtins
mysql_1  | 201109 16:44:30 InnoDB: Compressed tables use zlib 1.2.7
mysql_1  | 201109 16:44:30 InnoDB: Using Linux native AIO
mysql_1  | 201109 16:44:30 InnoDB: Initializing buffer pool, size = 128.0M
mysql_1  | 201109 16:44:30 InnoDB: Completed initialization of buffer pool
mysql_1  | 201109 16:44:30 InnoDB: highest supported file format is Barracuda.
mysql_1  | 201109 16:44:30  InnoDB: Waiting for the background threads to start
mysql_1  | 201109 16:44:31 InnoDB: 5.5.60 started; log sequence number 1605465
mysql_1  | 201109 16:44:31 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
mysql_1  | 201109 16:44:31 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
mysql_1  | 201109 16:44:31 [Note] Server socket created on IP: '0.0.0.0'.
mysql_1  | 201109 16:44:31 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
mysql_1  | 201109 16:44:31 [ERROR] Do you already have another mysqld server running on port: 3306 ?
mysql_1  | 201109 16:44:31 [ERROR] Aborting
mysql_1  |
mysql_1  | 201109 16:44:31  InnoDB: Starting shutdown...
mysql_1  | 201109 16:44:32  InnoDB: Shutdown completed; log sequence number 1605465
mysql_1  | 201109 16:44:32 [Note] mysqld: Shutdown complete
mysql_1  |
fhem_2021_mysql_1 exited with code 1
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 09 November 2020, 19:05:41
Zitat von: balli1187 am 09 November 2020, 18:18:36
Hast du mal die Expose-Blöcke komplett weggelassen?!
Wenn ich das richtig im Kopf habe, hat man "früher" die genutzten Ports per Expose an den Host übergeben. "Port" ist die Weiterentwicklung, da man hier eine genaue Definition zwischen internen und externen Ports vornehmen kann.

Expose habe ich komplett raus genommen.


    ports:
        - '3307:3306'
        - '33070:33060'
oder auch
    ports:
        - '3306:3307'
        - '33060:33070'


Das hat alles keinerlei Wirkung, selbst wenn ich den Container im Portainer mit remove entfernt habe.
Das Log sieht noch genau so aus und Port 3306 wird als belegt angezeigt. Die andere Datenbank läuft ja auch.
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 09 November 2020, 19:06:29
Von Balli1187:

Mal gecheckt was auf den Ports hängt?
Wurde glaub ich ein paar Posts zuvor schon diskutiert.

Andere Frage: was hast du mit den mysql-Instanzen vor? Wenn du nur von FHEM aus darauf zugreifen willst, reicht es aus, wenn die Container im gleichen Netzwerk sind. Ein weiterreichen an den Host ist nur notwendig wenn du von außen darauf zugreifen willst.
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 09 November 2020, 19:16:49
Zitat
Mal gecheckt was auf den Ports hängt?
Da ist natürlich die erste Datenbank Instanz :-)

Zitat
Andere Frage: was hast du mit den mysql-Instanzen vor? Wenn du nur von FHEM aus darauf zugreifen willst, reicht es aus, wenn die Container im gleichen Netzwerk sind. Ein weiterreichen an den Host ist nur notwendig wenn du von außen darauf zugreifen willst.
Bisher greife ich von außen auch darauf zu.

In einem zweiten Netz würden dann beide eine eigene IP:3306 Zuweisung haben, das wäre okay, wenn auch grafana mit in das Netz kommt.

Leider muss ich jedoch Fhem mit Host Netz betreiben, weil ich einen SMAEM betreibe und der kann nicht über NAT laufen :-(

Wer  könnte mir eine .yml Konfiguration liefern, bei der Fhem mit zwei Netzen im Docker Container arbeitet? Auch da sind meine Versuche bisher gescheitert, weshalh nun alles im selben Host Netz läuft.
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: Wernieman am 10 November 2020, 07:55:02
Also ... im Containmer sind die Port egal, aber außerhalb, d.h. auf dem Host System, müssen sie natürlich unterschiedlich sein.

Auf einem System darf es nur jeweils eine IP:Port Configuration geben.

https://docs.docker.com/config/containers/container-networking/
Der erste Port in der Config giebt den Host-Port an, also den des Container-Servers. Für mysql müsstest Du auf einem Container:
3306:3306

und auf dem 2.
3307:3306

Mekre, der erste Port ist Unterschiedlich.

Wenn die Container dagegen direkt  von einem anderem Container im gleichen Projekt angesprochen werden (gemeinsame docker-compose.yml) brauchst Du dagegen die Ports NICHT rauszulinken! Dann ist es ein zusätzliches Sicherheitsfeature, da dann myswql von "außen" nicht erreichbar.

Hinweis: Vom Container Server und allen anderen Containern auf dem System ist dagegen auch ein nicht rausgelingter mysql-Port erreichbar ....
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 08:09:22
Zitat von: Wernieman am 10 November 2020, 07:55:02
Wenn die Container dagegen direkt  von einem anderem Container im gleichen Projekt angesprochen werden (gemeinsame docker-compose.yml) brauchst Du dagegen die Ports NICHT rauszulinken! Dann ist es ein zusätzliches Sicherheitsfeature, da dann myswql von "außen" nicht erreichbar.

Hinweis: Vom Container Server und allen anderen Containern auf dem System ist dagegen auch ein nicht rausgelingter mysql-Port erreichbar ....
Und da wird das Problem sein, dass der Port 3306 innerhalb des Projektes doppelt ist und deshalb erst garnicht an den Host gegeben wird.

Dann muss ich mal schauen, ob ich zweimal ein Host Netz definieren kann und die beiden mysql Datenbanken dann in zwei Projekten trenne.

Vielen dank erstmal, ich berichte weiter
    Christian
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: Wernieman am 10 November 2020, 08:35:08
Nein .. wenn Du 2 Container hast, kannst Du 2 mal den gleichen Port verwenden.

jeder Container hat seine eigene IP, also ist IP:Port eindeutig ..... fast wie bei einer VM (wobei Container aber keine VMs sind!)
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 09:33:07
Zitat von: Wernieman am 10 November 2020, 08:35:08
Nein .. wenn Du 2 Container hast, kannst Du 2 mal den gleichen Port verwenden.

jeder Container hat seine eigene IP, also ist IP:Port eindeutig ..... fast wie bei einer VM (wobei Container aber keine VMs sind!)
Leider habe ich ein Host Netzwerk, wodurch alle Container die Host IP-Adresse haben.
Dann wäre es wahrscheinlich einfacher für mysql ein zusätzliches Netzwerk zu konfigurieren und somit zu Deinem Beispiel zu kommen.
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: Wernieman am 10 November 2020, 09:37:10
O.K. ... da hast Du recht ....

Hier in der Firma verwenden wir Docker für unsere Wepaplikationen und natürlich verwendet man dort kein "host-Netz". Kannst Du das mit dem "Host-Netz" nicht auf die notwendigen Container einschränken?
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 09:51:47
Zitat von: Wernieman am 10 November 2020, 09:37:10
Kannst Du das mit dem "Host-Netz" nicht auf die notwendigen Container einschränken?
Da bin ich halt noch nicht so fit und wollte hier Unterstützung finden ;-)
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: guhu am 10 November 2020, 10:02:01
Wenn ich das richtig sehe, ist in der Konf als Network mode host angegeben. Müsste aber m. E. Bridge sein, damit die Ports entsprechend umbiegen kannst. Bei host werden die Ports einfach durchgereicht.

Siehe hier: https://docs.docker.com/network/host/
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 10:22:01
Zitat von: guhu am 10 November 2020, 10:02:01
Wenn ich das richtig sehe, ist in der Konf als Network mode host angegeben. Müsste aber m. E. Bridge sein, damit die Ports entsprechend umbiegen kannst. Bei host werden die Ports einfach durchgereicht.

Siehe hier: https://docs.docker.com/network/host/
Okay, so ist das jetzt bei mir.

Und was muss ich nun im zweiten .yml angeben, damit die Container dort eine eigene IP-Adresse aus dem Hausnetz bekommen?
Geht das parallel zum host Netz, dass bereits besteht?

Das Host Netz in der einen .yml wird benötigt, damit ich dort ein SMAEM mit udp erreichen kann. Um es einfach zu halten habe ich die anderen Container dann alle dort mit rein konfiguriert.
Es würde nicht stören, wenn hierfür nur der Fhem Container ein Host Netz hat und die anderen eigene Ip Adressen im Haus Netz erhalten.

Nun muss ich für eine Migration eine zweite mysql starten, die jedoch auf den selben 3306 Port geht, was natürlich nicht klappt.
Hier bräuchte ich die Definition für ein separates Netz, in dem die Container gerne auch eigene IP Adressen bekommen.

Ich gestehe meine Unwissenheit über komplexere Netzwerke ein und bestätige, dass ich die Docker Netzwerkkonfiguration nur in Teilen Verstehe.

Gruß
   Christian
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: guhu am 10 November 2020, 10:44:16
Nimm Bridge networks und mappe dann die Ports.

also bspw. Docker 1 : 3306 - 3306
Docker 2: 3306 - 3307

Die haben dann alle die IP des Hosts, aber die beiden Datenbanken sind über die unterschiedlichen Ports ansprechbar.
Intern arbeiten die Docker dann mit 3306 (beide), extern mit 3306 und 3307
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: Wernieman am 10 November 2020, 11:21:34
Ich würde Pro Projekt eine eigene docker-compose.yml pflegen .. mit eigenem Netz.

Kann man anders machen, hat sich hier in der Firma so durchgesetzt.

Also wegen udp brauchst Du kein HomeNetz. Eher wegen "anycast" und ähnlichem?
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 11:43:08
Zitat von: Wernieman am 10 November 2020, 11:21:34
Also wegen udp brauchst Du kein HomeNetz. Eher wegen "anycast" und ähnlichem?
Ja, ich glaube so etwas war das Problem.

Zitat von: Wernieman am 10 November 2020, 11:21:34
Ich würde Pro Projekt eine eigene docker-compose.yml pflegen .. mit eigenem Netz.
Das versuche ich auch so zu implementieren, da ich jetzt die Umgebung für 2021 aufsetze, nur das mit den Netzen war mir alles nicht so klar.

Nun habe ich es, dank Euch, etwas weiter geschafft. Vielen, vielen Dank für Eure Geduld.

1) docker-compose.yml nur Netzwerk Teile.
    - Alle Expose waren überflüssig.
    - Fhem ist jetzt wegen des SMAEM im "network_mode: host"
    - Alle anderen Container nutzen das "bridge" Netzerk und geben Ports, die vom Hausnetz erreicht werden sollen, weiter.

version: '3.3'

networks:
  net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.27.0.0/24

volumes:
snip...

services:

  fhem:
snip...
    network_mode: host
snip...

  portainer:
snip...
    networks:
      - net
    ports:
        - "9000:9000"
snip...

  mysql:
snip...
    networks:
      - net
snip...
    ports:
        - "3306:3306"
        - "33060:33060"
snip...

  zigbee2mqtt:
snip...
    networks:
      - net
snip...

  grafana:
snip...
   networks:
      - net
    ports:
      - "4000:3000"
snip...

  renderer:
snip...
    networks:
      - net
    ports:
      - "8081:8081"
snip...


2) Um nun die zweite Datenbank mit in die bestehende Konfiguration auf zu nehmen verwende ich jetzt das hier.
    - Es wird ein neuer Projektname verwendet
    - Das bestehende Netzwerk wird verwendet

version: '3.3'

# hier ist kein Netzwerk definiert

services:

  mysql:
snip...
# auch hier ist kein Netzwerk definiert, wodurch das default Netzwerk verwendet wird und
# die Ports dort zusätzlich erstellt werden
    ports:
        - '3307:3306'
        - '33070:33060'
snip...
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: guhu am 10 November 2020, 13:05:26
Genau. Du könntest noch gucken, ob Du die Ports 33060, 33070 überhaupt brauchst. Nur für die DB brauchst Du die ja nicht.
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 13:21:47
Zitat von: guhu am 10 November 2020, 13:05:26
Genau. Du könntest noch gucken, ob Du die Ports 33060, 33070 überhaupt brauchst. Nur für die DB brauchst Du die ja nicht.
Das hatte ich bereits in der Doku nachgelesen, der Port 33060 ist für x-Protokol , was ich glaube ich garnicht verwende. Somit schmeiße ich den auch noch raus.

Momentan läuft bereits ein sync zur zweiten Datenbank, was auch dringend notwendig war, denn in der Alten Datenbank ist wohl ein Block Fehler,
der jedoch auf der Logischen Ebene nicht aufgefallen ist. ein Copy auf Betriebssystemebene scheitert allerdings bereits. Puh, noch rechtzeitig bemerkt ;-)

Auch weitere Services sind bereits umgezogen. 2021 kann kommen :-)
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: Wernieman am 10 November 2020, 13:33:14
Dann bist Du zu Hause weiter als ich .. stecke seit Monaten in der Planungsphase ...
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 14:01:01
Zitat von: Wernieman am 10 November 2020, 13:33:14
Dann ist Du zu Hause weiter als ich .. stecke seit Monaten in der Planungsphase ...

Für was?
Das ging eigentlich total schnell.
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: Wernieman am 10 November 2020, 14:02:59
Naja .. nicht nur FHEM, sondern den Kompletten Server ...

Liegt auch eher daran, das ich privat aktuell keinen Bock habe, mich damit zu Beschäftigen ;o)

Gibt übrigens auch einen Spruch dafür:
Der Schuster hat die schlechtesten Schuhe ....
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 14:08:04
Zitat von: Wernieman am 10 November 2020, 14:02:59
Naja .. nicht nur FHEM, sondern den Kompletten Server ...

Liegt auch eher daran, das ich privat aktuell keinen Bock habe, mich damit zu Beschäftigen ;o)

Gibt übrigens auch einen Spruch dafür:
Der Schuster hat die schlechtesten Schuhe ....

Mein Umfeld läuft auf einem RPI 4 mit 4 Gb Ram und einer ssd 250 GB
Bisher leider aber auf des SD Stick, was mir nun Angst gemacht hat.

Nun habe ich Docker erst mal auf die ssd umgezogen, damit das schreiben auf dem SD Stick ein Ende hat.
Das Endziel ist halt von ssd zu Booten, was aber bisher mit dem RPI 4 bei mir nicht klappen will.

Hast Du den das fhem Umfeld schon in Docker? Ansonsten kann ich Dir die .yml Files schicken.
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: Wernieman am 10 November 2020, 14:15:36
Aktuell läuft es auf einem X86 und daneben steht (nicht aktiv) der neue X86 .... mit Basiskonfig.

Verwendest Du den "offiziellen FHEM Container"? Der ist mir eigentlich zu "Fett" und ich würde mir einen eigenen Bauen ....
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 14:19:39
Zitat von: Wernieman am 10 November 2020, 14:15:36
Aktuell läuft es auf einem X86 und daneben steht (nicht aktiv) der neue X86 .... mit Basiskonfig.

Verwendest Du den "offiziellen FHEM Container"? Der ist mir eigentlich zu "Fett" und ich würde mir einen eigenen Bauen ....
Hast Du zu wenig RAM und Disk geordert??? Das wäre mir den Aufwand nicht wert.
Ich stehe halt auf Arbeitsteilung und verwende nur gelieferte Container.

X86 mit Win oder Linux?
Fhem bereits im Docker?
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: Wernieman am 10 November 2020, 16:28:57
ZitatX86 mit Win oder Linux?
LOL .... Du kennst mich hier im Forum zu wenig ... ;o)
Nur Linux ...

ZitatIch stehe halt auf Arbeitsteilung und verwende nur gelieferte Container.
Prinzipiell nichts dagegen. Werde ich bei anderen auch so machen. Wegen des FHEM Container (auch schon im passenden Thread gesagt): Container an sich sollen Microservice sein. Der FHEM dagegen ist eine Eierlegende Wollmichsau .... und das spricht, meiner Meinung nach, gegen die Philosophie von Containern.

Ich hoffe aber, Du guckst darauf, das die Verwendeten Container auch aktuell gehalten werden? Bin da schon im Beruf "auf die Schnauze gefallen"....

Es ist auch Prinzipiell nicht schwierig, einen einfachen FHEM Container automatisch aufzusetzen:
1. Betriebsystem-Container wählen
2. Perl mit Module installieren
3. FHEM easy Way installieren
4. Cleaning

Dann ist zwar der "Tolle Watchdog" nicht drin, aber es ist eben ein einfacher Container .... nur muß ich mich mal aufraffen, mir die zeit zur Erstinstallation zu nehmen ... da das alte System aber läuft, fehlt der Druck ....
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 10 November 2020, 16:37:10
Zitat von: Wernieman am 10 November 2020, 16:28:57
LOL .... Du kennst mich hier im Forum zu wenig ... ;o)
Nur Linux ...
Ich vermisse mein Solaris, da hatte ich auch schon Fhem in der Zone am Laufen, aber das macht einsam ;-)
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: Wernieman am 10 November 2020, 16:58:07
Solaris ... da hatte ich nur kurz mit zu tuen ...
Titel: Antw:Docker - zwei mysql mit unterschiedlichem Port
Beitrag von: guhu am 11 November 2020, 10:26:02
Offtopic: der Vorteil des Containers ist es m. E., dass alles out of the box läuft, das spart Zeit und Fehlersuche.
Ansonsten ist es nämlich keineswegs so easy wie geschildert: mal fehlt hier ein Perl Modul, mal muss jenes noch gemacht werden. Das entfällt alles.
Titel: Antw:Docker - Netzwerke Host/Bridge - zwei mysql mit unterschiedlichem Port
Beitrag von: ch.eick am 11 November 2020, 10:58:47
Ich habe mal das Betreff geändert, dann kann jetzt auch generell über Docker Netzwerke geschrieben werden.
Viele Grüße
    Christian