Docker Container feste IP-Adresse geben (Portainer)

LyDJane

Cadet 2nd Year
Registriert
Apr. 2018
Beiträge
27
Hallo zusammen,

vorab möchte ich mitgeben, dass ich weder ein Docker, noch Portainer Experte bin, sondern viel mehr mich gerade mit der Martiere anfange zu beschäftigen.

Konkret geht es um folgendes.
Ich habe etliche Docker Container am laufen, welche ich mit Portainer eingerichtet habe. Diese laufen teils als "bridge" mit verschiedenen Ports aber auch als "br0" mit eigenen IP-Adressen. Die IP-Adresse habe ich unter Portainer im Reiter "Network" eingetragen.

Dies funktioniert auch sehr gut, bis zum Zeitpunkt, wo das Betriebssystem neu gestartet wird.

Sobald das gesamte System neu gestartet wird, starten die Docker Container mit den eingetragenen IP-Adresse nicht mehr automatisch mit. Ich muss jedes mal den Container händisch bearbeiten und dann neu starten. Die Zuordnung der IP-Adressen erfolgt dann auch wahllos und nicht mit den jeweils hinterlegten IP-Adressen. So kann es beispielsweise vorkommen, dass Container A die IP (.17) hat und dann nach Neustart plötzlich (.23). Obwohl diese vorher ja problemlos auf dieser IP-Adresse lief.

Woran kann dies liegen, bzw. was mache ich hier anscheinend grundsätzlich falsch?
 
Klingt ein wenig so, als würde da dein DHCP-Server dazwischen funken. Sind die von dir fest vergebenen IPs im Bereich dessen, was der DHCP verteilt? Falls ja, außerhalb dieses Bereich bleiben (eventuell musst du dafür den Bereich des DHCP einschränken).
 
LyDJane schrieb:
Woran kann dies liegen, bzw. was mache ich hier anscheinend grundsätzlich falsch?
Klingt als ob die Konfiguration nicht gespeichert wird?

Weil wenn du eine Adresse vorgibst und diese wird nicht genommen und die Container sind auch aus heist das für mich eigentlich das keine gültige Konfig vorliegt.
 
kamanu schrieb:
Klingt ein wenig so, als würde da dein DHCP-Server dazwischen funken. Sind die von dir fest vergebenen IPs im Bereich dessen, was der DHCP verteilt?
Nein, die liegen in einem gesonderten Bereich, welcher nicht durch den DHCP automatisch verteilt wird.

sikarr schrieb:
Klingt als ob die Konfiguration nicht gespeichert wird?
aber die Container laufen jetzt beispielsweise wieder mit der gleichen Konfiguration problemlos?

sikarr schrieb:
Weil wenn du eine Adresse vorgibst und diese wird nicht genommen und die Container sind auch aus heist das für mich eigentlich das keine gültige Konfig vorliegt.
Macht Sinn, aber wie kann ich das überprüfen? Es wird ein Error angezeigt, wenn das System neu gestartet wird in dem Container. Wenn ich diesen aber wieder editiere und manuell starte, funktioniert es auf Anhieb problemlos.
 
Okay, korrigiere. Es gibt keine Fehlermeldungen mehr (hatte ich so im Hinterkopf noch).
Nach neustart kommen die Docker nicht hoch, sobald ich diese anwähle und manuell starte, sind sie sofort da.
 
Hast du denn die Docker so eingerichtet, dass sie automatisch starten? Dazu als Option beim Starten des Container

--restart always

anfügen. Machst du das nicht, starten die Container auch nicht automatisch beim Neustart.
 
Hmm, dann sollten die Container automatisch starten. Die Option -d hast du auch genutzt? Dann werden die Container im Hintergrund ausgeführt. Wenn ja, kann ich dir auch nicht sagen, warum sie nicht automatisch starten.
 
In Portainer sind alle als restart always eingestellt. Funktioniert bei allen, bis auf die beschriebenen Docker.
 
Die IP-Adressen der Container im Docker-Netzwerk (172.17.x.x) sind doch auch relativ egal. Du erklärst leider nicht, wozu die festen Adressen gut sein sollen. Ich vermute für die Kommunikation der Container untereinander. Dazu nutzt man aber den internen DNS von Docker. Wenn der MariaDB Container den Namen mariadb hat, dann ist er für einen anderen Container unter http://mariadb:3306 erreichbar.
 
Soweit ich weiß, geht das mit der internen DNS-Auflösung aber nur, wenn man ein eigenes Bridge-Netzwerk erstellt. Das standard-mässige Bridge-Netzwerk kann das wohl nicht. Zumindest auf meiner Synology geht das nur mit einem neu erstellten Bridge-Netzwerk. Und die Container, die miteinander kommunizieren wollen, müssen sich natürlich im gleichen Bridge-Netzwerk befinden.

Wenn man wirklich feste IPs für die Container benötigt, um darauf zuzugreifen, sollte man mit MacVLANs arbeiten. Dann kann man jedem Container eine eigene IP aus dem Netzwerk des Hosts zuweisen. So mache ich es mit Pihole und Unbound. Die haben beide eine eigene IP-Adresse. Somit braucht man sich auch nicht um eventuell schon belegte Ports zu kümmern. Sowohl Pihole als auch Unbound können dann Port 53 (DNS) nutzen.
 
So habe ich es eingerichtet.
1674208061404.png


Darüber laufen die Container. Wie gesagt, sobald ich diese manuell starte, läuft alles einwandfrei.
Startet der Host neu, dann kommen die Container nicht online.
 
@Zipfelklatscher
Die DNS-Auflösung geht, wenn sich die Container im gleichen Netz befinden - es muss kein Bridge sein. Ein Container kann auch in mehreren Netzwerken sein und hat dann auch mehrere IP Adressen.

@LyDJane
Wozu brauchen die Container eine feste IP?
 
  • Gefällt mir
Reaktionen: Zipfelklatscher
Weil ich für die Container eine Freigabe nach außen habe und diese in anderen Anwendungen via IP eingebunden habe.
 
Einfach die IP des Hosts und den richtigen Port nutzen? Fixe IPs für Container sollte man eig nicht machen wenn man es vermeiden kann. Wenn man den ganzen Container nach außen exposed greifen auch die ganzen Policies nicht mehr und alle Ports des Containers sind frei zugänglich im Netzwerk sofern nicht über eine separate Firewall geregelt. Das NAT von Docker ergibt schon Sinn.

Sonst halt mal per Hand und compose die fixen IPs vergeben. So Management Interfaces wie Portainer sind cool so lange sie funktionieren. Wenn es nicht klappt muss man halt manuell Hand anlegen.
 
  • Gefällt mir
Reaktionen: efcoyote
Ich benötige das System nun so, wie ich es aufgesetzt habe, da die IP-Adressen etc. in anderen Systemen vor Ort hinterlegt sind.

Ich weis weiterhin nicht, woran es liegt.
 
Zurück
Oben