Hostnamen zwischen Containern pingen

Hallo zusammen ;

Ich betreibe ein TS-464 mit Container-Station.

Ich habe mehrere Container eingerichtet (ha, grist, lldap, authelia ..), die alle über einen Caddy-Container als Reverse Proxy angesprochen werden. Sie sind direkt in CS als „Container“ installiert, nicht über eine Compose-Datei.

Alles funktionierte einwandfrei, außer dass ich auf die 10.0.3.x-Adressen reverse-proxien musste, da die Hostnamen nicht funktionierten. Das war kein Problem, bis ich das NAS für ein Firmware-Update neu gestartet habe: Alle Container haben ihre IP gewechselt … ich muss Caddy mit den neuen IPs neu konfigurieren …

Ich dachte, Docker hätte eine Art „DNS-Resolver“, der mit den Container-Hostnamen im selben Netzwerk dokumentiert ist, sodass ich sie in Caddy über Hostnamen referenzieren könnte. Habe ich da etwas übersehen?

Einen internen DNS-Server zu installieren bringt auch nichts, wenn die Container-IP bei jedem Neustart weiterhin wechselt.

Eine weitere Option wäre, statische IPs für die Container zu setzen, aber ich habe nicht gefunden, wo das geht (vielleicht per SSH über die Kommandozeile …)

Kann jemand gute Praktiken teilen?

Viele Grüße,
Xavier

Standardmäßig verwenden die Container DHCP. Ich habe gerade nachgesehen und weiß nicht, ob es eine Möglichkeit gibt, eine feste IP-Adresse für die Container zu vergeben. In der Container-Einrichtung gibt es das nicht. Vielleicht muss man das in Compose machen.

Man kann die Container in den Bridge-Modus versetzen, sodass sie dann mit einem bestimmten Netzwerkadapter verbunden sind. Dann kann man ihnen feste IPs zuweisen.

Für statische IPs auf einem Standard-Container kannst du die IP unter „Netzwerk“ einrichten, aber sie wird gebrückt.

Ich weiß, dass man bei der Verwendung von Compose innerhalb einer Anwendung per App-Namen referenzieren kann, solange sich die Container im selben Netzwerk befinden. Ich mache das so beim nginx-proxy-manager. Unten findest du ein Beispiel für eine Compose-YAML für NPM und eine weitere App, Dozzle. Ich glaube, ich musste das Netzwerk backendApps mit dem Docker-Befehl erstellen, bin mir aber nicht mehr sicher. Die NPM-Konfiguration ist übrigens nicht vollständig, sie zeigt nur die Verwendung von zwei Netzwerken. Alle meine anderen Apps sind einfach im backendApps-Netzwerk und NPM übernimmt das Reverse Proxy und HTTPS.

services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    stdin_open: true
    tty: true
    container_name: npm
    networks:
      qnet-static-eth0-custom:  # für externe IP/MAC-Definition
      backendApps: # alle gemeinsam genutzten Container sollten dieses Netzwerk haben.

networks:     
  qnet-static-eth0-custom:
    external: true
  backendApps:
    external: true
services:
  dozzle:
    image: amir20/dozzle:latest
    container_name: dozzle
    stdin_open: true
    tty: true
    networks:
      - backendApps
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 2080:8080

networks:     
  backendApps:
    external: true

Wie man in NPM referenziert

Ich gehe nicht auf alle Details ein, die für Compose-Dateien nötig sind, aber wenn du weißt, wie man sie benutzt, sollte das helfen.

Vielen Dank ; ich werde das alles ausprobieren und hier Feedback geben.

Der letzte Beitrag eröffnet mir sogar die Möglichkeit, ein weiteres Problem zu lösen: Der Reverse Proxy befindet sich im Standardnetzwerk für Container (lxcbr0), aber die Container in „applications“ sind in ihrem eigenen Netzwerk. Vielleicht kann ich, wenn ich das lxcbr0-Netzwerk zu meinen Apps hinzufüge, vom Caddy Reverse Proxy zur App weiterleiten (im Moment können sie sich nicht einmal per IP-Adresse anpingen).

Ich halte euch auf dem Laufenden ; danke für deine Zeit!
Xavier

Hier poste ich das versprochene Feedback.

Es ist mir schließlich gelungen, den Reverse Proxy (Caddy) manuell mit dem für die „Anwendung“ (also die Compose-Datei) erstellten Netzwerk zu verbinden:

docker network connect my_app_default caddy-1

Dadurch wurden sowohl das Verbindungsproblem als auch das interne DNS-Problem gelöst: In meiner Caddy-Datei kann ich nun auf den „Dienstnamen“ statt auf die Container-IP als Reverse Proxy verweisen.

Vielen Dank euch beiden für eure Zeit; ich hoffe, das ist für alle nützlich, die nach diesem Anwendungsfall googeln.

Viele Grüße,
Xavier