Docker - Netzwerke Host/Bridge - zwei mysql mit unterschiedlichem Port

Begonnen von ch.eick, 09 November 2020, 19:04:58

Vorheriges Thema - Nächstes Thema

ch.eick

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
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: 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.
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

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.
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
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.
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

Wernieman

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 ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

ch.eick

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
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

Wernieman

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!)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

ch.eick

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.
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

Wernieman

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?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

ch.eick

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 ;-)
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

guhu

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/
FHEM 5.9 auf Synology DS918+ (in Docker), HM-CFG-USB2 mit hmlan, HM-CC-RT-DN, HM-SEC-SC-2, nanoCUL,a-culfw,deCONZ,Brennenstuhl-Steckdosen,-FB
Module:ENIGMA2,SONOS,FRITZBOX,FB_CALLLIST,WDT_TIMER,VCONTROL300,WITHINGS

ch.eick

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
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

guhu

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
FHEM 5.9 auf Synology DS918+ (in Docker), HM-CFG-USB2 mit hmlan, HM-CC-RT-DN, HM-SEC-SC-2, nanoCUL,a-culfw,deCONZ,Brennenstuhl-Steckdosen,-FB
Module:ENIGMA2,SONOS,FRITZBOX,FB_CALLLIST,WDT_TIMER,VCONTROL300,WITHINGS

Wernieman

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?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

ch.eick

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...
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