Docker Container mit eigener IP vom Router

SirLoading

Ensign
Registriert
Dez. 2021
Beiträge
227
Guten Tag zusammen,

hoffe, bin im richtigen Unterforum.

Habe einen ORDOID H3 auf dem OMV läuft, darauf läuft Docker und ich habe 4 Stacks.
Stacks: Smarthome, Bilderverwaltung, Tools & DMS

Nun sind die Container über die Host IP erreichbar.

Ich möchte aber gerne gewisse Container nicht nur über das Interne, sondern über ein externe IP erreichbar machen.

Nun habe ich das Problem, ich kann nur 1 Stack ein externers Netzwerk zuweisen.
Somit wäre dieser Stack mit der externen Anbindung abgedeckt.
Alle Container können eine externe IP zugewiesen bekommen, sind aber noch innerhalb des Stacks für die anderen Container unter Interner IP erreichbar.
version: '3'
services:
........
internal:
ipv4_address: 172.22.3.2
external:
ipv4_address: 192.168.111.111


networks:
internal:
driver: bridge
ipam:
config:
- subnet: 172.22.3.0/24
gateway: 172.22.3.1
ip_range: 172.22.3.0/24

external:
driver: macvlan
driver_opts:
parent: enp1s0
ipam:
driver: default
config:
- subnet: 192.168.1.1/16
gateway: 192.168.1.1

Wenn ich jetzt einem 2. Stack das Externe Netzwerl hinzufüge, dann meckert er, die Gateway IP 192.168.1.1 (Router IP) sei schon belegt.

Warum ich gerne manche Container mit einer Router IP versorgen möchte?
z.B. im SmartHome Container gehen mir mit dem Weg über den Host gewisse Funktionen verloren, z.B. WOL Befehle, hier gehe ich den Umweg über einen FritzBox Befehl um ein Gerät via WOL zu starten.
Was aber andere Funktionen angeht, muss ich immer einen Workaround bauen, ist nervig.

Jemand eine Idee, wie ich mehrere Externe Netzwerke anlegen kann?

Vielen Dank
Grüße
SIrLoading
 
Mehrfach gleiche Netzwerk mit gleichen Subnet zu erstellen ist nicht so gut, dadurch könnte es zu IP konflikten kommen.
Sollen die unterschiedlichen Stacks denn in einem gemeinsamen Subnet sein? Wenn ja, dann das Netzwerk extern definieren und in der Compose einfach aufs externe verweisen und kein neues mehr erstellen.

https://docs.docker.com/compose/networking/#use-a-pre-existing-network
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: missi
Also ich brauche die Kommunikation Stackintern und manchen Container sollen aber über ihre eigene IP ansprechbar sein. (IP Bereich vom Router)

Bei dem von dir geschickten Link habe ich Probleme mit der Stackinternen Kommunikation.

Ich habe den Spaß nur mit meinem Beispiel hinbekommen, aber auch nur für einen Stack.
Es muss ja nicht jeder Container nach außen geführt werden.

Ein Separates Netzwerk anlegen macht auch Probleme.
 
Habe bei mir für diese Zwecke entsprechend ein Netzwerk zunächst selber erstellt. Und in dem Compose File eben nachher die entsprechenden Containern zu den extern erstellten Netzwerk hinzugefügt.

Wenns darum geht wie man außerhalb von der Compose ein Netzwerk erstellen kann:
https://docs.docker.com/network/drivers/macvlan/

SirLoading schrieb:
Bei dem von dir geschickten Link habe ich Probleme mit der Stackinternen Kommunikation.

Stackintern läuft es doch über bridge und nicht macvlan. An dem Bridge Netzwerk wird doch aber gar nichts geändert?
 
Oder einen Reverse-Proxy. Für alles was von außen ansprechbar ist, eine Subdomain und wenn ein Port durchgereicht wird, per <IP>:<Port> im LAN. Also https://hass.meine.domain.org und http://192.168.1.5:8123 bei mir.

Bei Traefik wird das über Labels und eine dedizierte Portweiterleitung geregelt. Lasse ich Labels weg und definiere ein eigenes Netzwerk oder Host-Mode (z.B. für DuckDNS-IP-Updater), ist der Container nur im LAN zu erreichen.
 
Sobber schrieb:
Wenns darum geht wie man außerhalb von der Compose ein Netzwerk erstellen kann:
https://docs.docker.com/network/drivers/macvlan/
Ich arbeite mit "Portainer" und habe das mit macvlan schon versucht.
Meine Container können aber nicht auf das Netzwerk zugreifen.
Ein versuch über die Konsole brachte auch nichts.
Sobber schrieb:
Stackintern läuft es doch über bridge und nicht macvlan. An dem Bridge Netzwerk wird doch aber gar nichts geändert?
Ja, tut es.
Nur kann Container 1 dann nicht mit Container 2 reden.
Das Pingen über die Konsole des Container 1 zu 2 geht dann auch nicht mehr.
(Geht aber wenn ich ein Netzwerk über den Stack anlegen lasse)

mae1cum77 schrieb:
https://hass.meine.domain.org
Hier geht es nicht um das außerhab meines Routers. :)
Es geht um das "LAN".
Also, einen Container im Stack-Netzwerk und eine LAN IP.

Eine Subdomain nutze ich bereits für VPN. (DDNS / Daher keine Portfreigaben in der FritzBox)

Ich versuch da morgen mal weiter. :/

Danke
Ergänzung ()

Ach, eventuell habe ich die Lösung!
Werde ich dann testen und berichten.
Danke!
 
Zuletzt bearbeitet:
SirLoading schrieb:
Nur kann Container 1 dann nicht mit Container 2 reden.
Das Pingen über die Konsole des Container 1 zu 2 geht dann auch nicht mehr.
(Geht aber wenn ich ein Netzwerk über den Stack anlegen lasse)
Wenn beide Container im gleichen Netzwerk sind müssen die sich erstmal sehen können. Unabhängig ob das Netzwerk mit starten des Stacks erzeugt wird. Oder vorher schon (ggfs. von einem anderen Stack erzeugt wurde).
Sicher das die Containter wirklich im gleichen Netzwerk sind? Im Portainer das Netzwerk auswählen und gucken ob beide Container zu diesem gehören. Ggfs auch nochmal die ip gegen prüfen.
 
So, habe das so gelöst:

Als erstes muss man ein Netzwerk anlegen: ("Configuration")

1700370487400.png


Dann ein weiteres Netzwerk als "Creation", welches die zuvor angelegte "Configuration" nutzt:
1700370669400.png


Dann müssten wir im Stack fogendes Einfügen:
version: '3'
services:

...

networks:
...
external:
ipv4_address: 192.168.3.130


networks:
...
external:
name: Network_External

Dann sollten die Container intern (wenn ein internes Netzwerk für den Stack angegeben ist) und extern unter der IP 192.168.3.130 erreichbar sein.


Danke und Grüße
SirLoading
 
Zuletzt bearbeitet:
Zurück
Oben