Ich habe ein paar Docker-Container, die wie folgt laufen:
- Nginx
- Web App 1
- Web App 2
- PostgreSQL
Da Nginx eine Verbindung zu den Webanwendungsservern in Webanwendung 1 und 2 herstellen muss und die Webanwendungen mit PostgreSQL kommunizieren müssen, habe ich folgende Verknüpfungen:
- Nginx --- Link ---> Web App 1
- Nginx --- Link ---> Web App 2
- Web App 1 --- Link ---> PostgreSQL
- Web App 2 --- Link ---> PostgreSQL
Das funktioniert zunächst ziemlich gut. Wenn ich jedoch eine neue Version von Web App 1 und Web App 2 entwickle, muss ich sie ersetzen. Ich entferne die Web-App-Container, richte neue Container ein und starte sie.
Für die Web-App-Container wären ihre IP-Adressen zunächst ungefähr so:
- 172.17.0.2
- 172.17.0.3
Und nachdem ich sie ersetzt habe, haben sie neue IP-Adressen:
- 172.17.0.5
- 172.17.0.6
Diese exponierten Umgebungsvariablen im Nginx-Container verweisen weiterhin auf die alten IP-Adressen. Hier kommt das Problem. Wie ersetze ich einen Container, ohne die Verbindung zwischen Containern zu unterbrechen? Das gleiche Problem tritt auch bei PostgreSQL auf. Wenn ich die PostgreSQL-Image-Version aktualisieren möchte, muss ich sie auf jeden Fall entfernen und die neue ausführen, aber dann muss ich das gesamte Container-Diagramm neu erstellen, sodass dies nicht ideal für den realen Serverbetrieb ist.