NEWS
IoBroker Docker Image mit MACVLAN möglich?
-
@marc-berg Nur nochmal zum Verständnis... Beim MACVLAN kann es doch auch dazu kommen (da man kein Portmapping machen kann), dass man eine Doppelbelegung eines Ports durch 2 Anwedungen bekommt. (Wenn diese standardmäßig den gleichen Port nutzen).
Das bekomme ich doch nur durch ein mapping im bridge netzwerk weg, oder? -
Also ich würde hier einigen Dingen widersprechen.
Auch mit macvlan macht man portmappings. Allerdings gibt es keine Notwendigkeit Container Ports auf andere Ports umzubiegen, da der Container ja seine eigene ip Adresse erhält und es dadurch zu keinen portkollisionen kommen kann wie im Bridge Modus, wo man mehrere Container auf die Ports des Host Systems Mappen will.Macvlan bedeutet nix anderes als das eine virtuelle netzwerkkarte
Simuliert wird und der Container dann fast wie eine vm funktioniert.
Die einzige Einschränkung , die ich kenne ist, das der Container den host netzwerktechnisch nicht ohne weiteres erreichen kann.
Daher sollte man dem Container dann zusätzlich noch das Bridge Netz zuweisen. Aber eigentlich ist das nur in Ausnahmefällen notwendigIch selbst betreibe 2 Iobroker docker Container mit macvlan (prod und test). Der prodcontainer läuft dann zusammen mit einem Redis Container. Der Redis benötigt allerdings keine eigene ip aus dem lan.
Was ich nicht ausprobiert habe ist, ob alle Ports automatisch von außen erreichbar sind. Ich würde sagen, nein. Ein Service im Container der auf einem Port hört, wenn der nicht im docker Aufruf oder docker-compose definiert wurde wird nicht von außen durchgereicht.
Von innen heraus können allerdings alle Ports nach außen genutzt werden. -
@ben1983 sagte in IoBroker Docker Image mit MACVLAN möglich?:
dass man eine Doppelbelegung eines Ports durch 2 Anwedungen bekommt.
Moin,
es gibt einen Standard, wer welchen Port nutzt, nur wenn man(n) da händisch herumpfuscht, kann es auf einem Server zu Problemen kommen.
Hier mal wieder die Seite mit den Ports und welche man selbst nutzen sollte -> https://de.wikipedia.org/wiki/Liste_der_standardisierten_PortsWenn Du in einem Docker Container, zwei Applikationen hast, die den gleichen Port nutzen, dann ist da was faul, sind es zwei Docker Container, logischerweise dann mit unterschiedlichen IPs, kann der Port identisch sein, da ja die Aufrufe immer
ip:port
ist.
Oder ich verstehe Dich nicht?VG
Bernd -
@oliverio @dp20eic
Ich meinte es so:
Wenn ich bspw. aus ioBroker heraus zwei Applikationen ansprechen möchte, die den gleichen Port haben:
sagen wir: 192.168.2.10:8080 und 192.168.2.11:8080, dann ist ds ja vollkommen legitim, da es ja auf zwei verschiedenen ips / systemen läuft.
Der ioBroker aber möchte mit beiden Reden. Ist es nicht für Ihn der gleiche Port, oder zählt bei der Benutzung der Ports immer noch die ip mit in die Kombination?Wenn es nicht zwei externe systeme wären, sondern zwei conatainer, dann müsste ich sie mindestens in briged netzworks bringen und bspw. bei einem den port ummappen, oder?
@OliverIO Echt geht ein Portmapping bei MACVLAN? Bei mir gibt es im Portainer dann immer einen Fehler...
Ps. Es ist also immer eine Kombination IP:PORT => Dann stimmt es natürlich. dann bräuchte man sie nicht ummappen. -
@dp20eic Wenn ich in einem Stack nichts angebe, dann erzeugt er ja ein bridged network.
Kann den stack auch einem erzeugten briged network zuweisen, aber nicht dem systemseitigen "bridge", da meckert er. Geht das mit einem Stack nicht? -
@ben1983 sagte in IoBroker Docker Image mit MACVLAN möglich?:
Moin,
Wenn ich bspw. aus ioBroker heraus zwei Applikationen ansprechen möchte, die den gleichen Port haben:
sagen wir: 192.168.2.10:8080 und 192.168.2.11:8080, dann ist ds ja vollkommen legitim, da es ja auf zwei verschiedenen ips / systemen läuft.
Der ioBroker aber möchte mit beiden Reden. Ist es nicht für Ihn der gleiche Port, oder zählt bei der Benutzung der Ports immer noch die ip mit in die Kombination?Aus Sicht des
ioBroker's
sind das zwei völlig unterschiedliche Dinge.
Zwei Beispiele, mal sehen ob Du erkennst was was ist- eine Straße, Name
Hauptstraße 1
, ein Wohnblock mit 4 Parteien -> Du möchtest jeder Partei ein Brief schicken dann ist dasHauptstraße 1:Partei_1
Hauptstraße 1:Partei_2
Hauptstraße 1:Partei_3
Hauptstraße 1:Partei_4
- Mehrere Straßen, Namen
Hauptstraße
,Weg
,Kreuzweg
undStichstraße
, Einfamilienhäuser Hausnummer 1, dann wird darausHauptstraße:Hausnummer_1
Weg:Hausnummer_1
Kreuzweg:Hausnummer_1
Stichstraße:Hausnummer_1
@ben1983 sagte in IoBroker Docker Image mit MACVLAN möglich?:
Wenn es nicht zwei externe systeme wären, sondern zwei conatainer, dann müsste ich sie mindestens in briged netzworks bringen und bspw. bei einem den port ummappen, oder?
Das verstehe ich nicht!
VG
Bernd - eine Straße, Name
-
@dp20eic na die Container im bridged network sind ja von außen über HostIp:Port zu erreichen.
Wenn hier zwei Container mit den gleichen Ports (intern) laufen, dann müsste ich ihn ja ummappen, sonst wäre er ja nicht zu erreichen, bzw. Wäre doppelt.Das andere Thema meinte ich gerade anders herum. Nicht nach Hauptstraße:Hausnummer1
Sondern von Hauptstraße:Hausnummer1
Also Hintergrund:
Wenn ich zwei Adapter hätte, die auf den gleichen Port zugreifen, geht das doch nicht, oder?Also man kann ja wie bspw. Beim MQTT also Broker Verbindung zu mehreren Clients haben, weil die eben den Port ansprechen und der mqtt Broker als einzige Anwendung diesen Port nutzt.
Eine zweite Anwendung kann dies aber nicht mehr nutzen, oder?Gemeint war nun, wenn zwei Anwendungen mit identischem Port in zwei Containern laufen, geht das ja. Aber der iobroker kann nicht auf beide zugreifen, da man ja im iobroker nichts zwei Adapter mit dem gleichen Port belegen.
Also wenn bspw. Zwei MQTT Broker extern wären und beide mit Port 8082… dann wäre es ja ip1:8082 und ip2:8082
Aber: ich kann ja keine zwei mqtt Adapter als Client auf Port 8082 konfigurieren, oder?Oder eben, wenn es zwei komplett andere Anwendungen wären, die den gleichen Port haben standardmäßig bspw. 8082.
Wie sollte man da aus ioBroker heraus lösen, ohne dass man bei den externen Containern den Port ändert/ummappt? -
@oliverio sagte in IoBroker Docker Image mit MACVLAN möglich?:
Also ich würde hier einigen Dingen widersprechen.
Auch mit macvlan macht man portmappings.Aha, interessant. Und was mapps du dann wo hin?
Allerdings gibt es keine Notwendigkeit Container Ports auf andere Ports >umzubiegen, da der Container ja seine eigene ip Adresse erhält und es >dadurch zu keinen portkollisionen kommen kann wie im Bridge Modus, wo >man mehrere Container auf die Ports des Host Systems Mappen will.
Richtig, und da jeder Container im MACVLAN seine eigene IP im physischen Netzwerk erhält, benötigt man kein Mapping.
Was ich nicht ausprobiert habe ist, ob alle Ports automatisch von außen erreichbar sind. Ich würde sagen, nein. Ein Service im Container der auf einem Port hört, wenn der nicht im docker Aufruf oder docker-compose definiert wurde wird nicht von außen durchgereicht.
Das ist falsch. Natürlich sind alle Ports über die IP des Containers erreichbar. Ohne jedes Mapping.
-
Am Beispiel eines Webserver der im Container auf Port 80 läuft, könnte ich auch auf 8081 mappen
Dazu gebe ich bei Aufruf dann -p 8081:80 an
Dadurch habe ich ihn gemappt
Da man bei macvlan eine eigene ip hat benötigt man das eigentlich nicht, dann gebe ich einfach nur -p 80:80 an. Das nenne ich portmapping
Und Docker nennt das auch so
https://docs.docker.com/network/#published-portsZum: das ist falsch
Hier ein Ausschnitt aus dem selben Kapitel der Docker Doku
By default, when you create or run a container using docker create or docker run, the container doesn't expose any of its ports to the outside world. Use the --publish or -p flag to make a port available to services outside of Docker.Wie oben schon geschrieben geht es hier um Ports die von außen erreichbar sind. Ports von innen nach außen auf anderen Geräten sind alle offen.
-
@ben1983 sagte in IoBroker Docker Image mit MACVLAN möglich?:
@oliverio @dp20eic
Ich meinte es so:
Wenn ich bspw. aus ioBroker heraus zwei Applikationen ansprechen möchte, die den gleichen Port haben:
sagen wir: 192.168.2.10:8080 und 192.168.2.11:8080, dann ist ds ja vollkommen legitim, da es ja auf zwei verschiedenen ips / systemen läuft.
Der ioBroker aber möchte mit beiden Reden. Ist es nicht für Ihn der gleiche Port, oder zählt bei der Benutzung der Ports immer noch die ip mit in die Kombination?Wie schon geschrieben. Das Mapping betrifft nur von außen nach innen. Das heißt im Container horcht auf diesem Port dann auch ein Server Programm.
Wenn du vom iobroker als Client mit einem anderen Server sprechen willst musst du nix machen. Das geht immer. Auch wenn auf verschiedenen Geräten der gleiche Port angesprochen wird.Zu deiner Fehlermeldung
Benenne die mal, dann kann man mal schauen. -
@oliverio sagte in IoBroker Docker Image mit MACVLAN möglich?:
Zum: das ist falsch
Hier ein Ausschnitt aus dem selben Kapitel der Docker Doku
By default, when you create or run a container using docker create or docker run, the container doesn't expose any of its ports to the outside world. Use the --publish or -p flag to make a port available to services outside of Docker.
Wie oben schon geschrieben geht es hier um Ports die von außen erreichbar sind. Ports von innen nach außen auf anderen Geräten sind alle offen.Aber alles, was da steht gilt für Bridge Netzwerke, nicht für MACVLAN. Völlig anderes Thema.
Schau dir die Beispiele an, alles Bridge-Netzwerke.
-
Dann scheint es bei mir aus magischen Gründen irgendwie zu funktionieren
-
@oliverio sagte in IoBroker Docker Image mit MACVLAN möglich?:
Dann scheint es bei mir aus magischen Gründen irgendwie zu funktionieren
Die Magie würde ich gern sehen und vor allem gern wissen: was genau funktioniert da?
Wenn du mir noch EINE Stelle in einer Doku zeigst, wo im MACVLAN Portmapping durchgeführt wird, dann glaube ich dir
-
Muss mal meine Konfiguration zu Hause checken
-
@oliverio als irgendwie reden wir aneinander vorbei.
Wenn man außen (egal ob in einem Container oder nicht) 2 Anwendungen (mit unterschiedlichen ips) hat, die beide den gleiche Port nutzen (standardmäßig), dann kann ich doch im Container des ioBrokers nicht 2 Anwendungen (Adapter) haben die den gleichen Port nutzen. Oder? Glaube nicht.
Deswegen nutzt der Shelly Adapter auch standardmäßig nicht den mqtt Port. -
Definiere benutzen.
Als Client oder als Server?Evtl solltest du etwas mal über tcp ip Kommunikation nachlesen.
Wenn wir von portnummetrn sprechen, dann wird eigentlich immer nur die Server Seite betrachtet.
HTTP=80, der Web Server hört auf Port 80. 2 server auf dem gleichen Gerät /gleiche ip können nicht auf die gleiche portnummer hören. Können aber durchaus gleichzeitig viele Anfragen erhalten.
Auf der Client Seite wird ebenfalls ein Port gewählt. Das passiert automatisch und meist werden hier sehr hohe portnummern gewählt. Für dich ist das aber irrelevant.Ein Container kann nur genau eine ip haben.
-
@ben1983 sagte in IoBroker Docker Image mit MACVLAN möglich?:
Deswegen nutzt der Shelly Adapter auch standardmäßig nicht den mqtt Port.
Moin,
das hat doch nichts mit dem Portmapping zu tun, das ist das, was eine Applikation macht, und worauf Du möchtest, dass sie lauscht. Ich kann jede Applikation, in der Konfiguration sagen, dass sie den, oder den Port nehmen soll.
Daher hatte ich weiter oben mal den Link zu Wikipedia, mit den Standard Ports gepostet, normalerweise, um beim Beispiel vonmqtt
zu bleiben, ist das der1883
jetzt betreibst Du zweiioBroker
Adapter,mqtt
den Du so einrichtest, dass er auf 1883 hört, der zweite AdapterShelly
konfigurierst Du auf 1887, weil der Port noch frei ist. Die Geräte, die mit demmqtt
Adapter sprechen wollen, rufen dieiobroker ip
:port(1883)
und dieShellys
rufen (ioBroker ip:
port(1887)`, da muss auf dem Docker, egal was Du da für ein Netzwert fährst, nichts gemappt werden, das ist Konfiguration.Du bringst da, glaube ich, die Dinge durcheinander.
Edit
ich leider auch
Nehme die Tabelle raus! Wie sage ich immer,erst Denken, dann schreiben
, sorry für die Verwirrung.VG
Bernd -
@dp20eic sagte in IoBroker Docker Image mit MACVLAN möglich?:
Host ioBroker_test 192.168.178.35 38081:8081 iobroker ja
So ich hoffe ich habe mich nicht vertan, bin heute noch nicht ganz wach
Ui, du machst also Portmapping im Hostmodus. Ich glaube, jetzt haben wir alle (Un-)Möglichkeiten gesehen.
-
@marc-berg sagte in IoBroker Docker Image mit MACVLAN möglich?:
Ui, du machst also Portmapping im Hostmodus. Ich glaube, jetzt haben wir alle (Un-)Möglichkeiten gesehen.
Moin,
sag, ja bin noch nicht wach, schaue mir das aber gleich noch mal an und änder dann meinen Fehler
VG
Bernd -
@oliverio sagte in IoBroker Docker Image mit MACVLAN möglich?:
Definiere benutzen.
Als Client oder als Server?Evtl solltest du etwas mal über tcp ip Kommunikation nachlesen.
Wenn wir von portnummetrn sprechen, dann wird eigentlich immer nur die Server Seite betrachtet.
HTTP=80, der Web Server hört auf Port 80. 2 server auf dem gleichen Gerät /gleiche ip können nicht auf die gleiche portnummer hören. Können aber durchaus gleichzeitig viele Anfragen erhalten.
Auf der Client Seite wird ebenfalls ein Port gewählt. Das passiert automatisch und meist werden hier sehr hohe portnummern gewählt. Für dich ist das aber irrelevant.Ein Container kann nur genau eine ip haben.
Also ich versuche es nochmal irgendwie dar zu stellen, denn wir reden aneinander vorbei:
Wenn ich 2 container habe.
Sagen wir man beide wären im MACVLAN und würden eine Datenkommunikation über Port xy anbiten.Dann könnte ich doch aus einem Container in dem ioBroker läuft nicht zu beiden kommunizieren,
weil ich doch dann im ioBroker den Port 2 mal öffnen müsste. (Auch wenn es unterschiedliche IPs wären). Oder etwas nicht?Könnte man etwa mit beiden kommunizieren?