Abhängig von Ihrer genauen Situation müssen Sie unterschiedliche Lösungen verwenden:
Dienstinterne Hostnamenauflösung
Problem: Sie haben mehrere Container (/ Replikate) desselben Dienstes serviceX
, zB:
- Container
a1b3d130275a
mit HostnameserviceX.1.nq4rjbae
- Container
65040b1cada6
mit HostnameserviceX.2.m9wl1f1r
- Container
944704427b9e
mit HostnameserviceX.3.3d08baql
Nun möchten Sie den Hostnamen des zweiten ( serviceX.2.m9wl1f1r
) und des dritten ( serviceX.3.3d08baql
) Containers aus dem Container one ( serviceX.1.nq4rjbae
) abrufen .
Docker bietet eine Lösung namens Container Discovery mit einer DNS-Abfrage gegen tasks.$serviceName
:
nslookup tasks.serviceX [...] Name: tasks.serviceX Address 1: 10.0.0.205 a1b3d130275a (<- resolved locally by /etc/hosts) Address 2: 10.0.0.206 serviceX.2.m9wl1f1r Address 3: 10.0.0.207 serviceX.3.3d08baql
Darüber hinaus gibt es Diskussionen über die Herstellung von serviceX.
auflösbaren und somit vorhersehbar hostnames.¹ Schaffung ² ³ ⁴ Aber jetzt, keiner von ihnen umgesetzt wird, so dass diese Lösung funktioniert nur zur Laufzeit.
Hinweis: Wenn Sie den Hostnamen mithilfe der Vorlagenfunktion (wie docker service create ... --hostname {{.Service.Name}}.{{.Task.Slot}}
) festlegen, werden die Hostnamen lokal vorhersehbar, sie können jedoch von anderen Containern nicht aufgelöst werden.
Auflösung der Hostnamen zwischen Diensten
Problem: Sie haben mutliple Behälter der verschiedenen Dienste serviceX
, serviceY
. Aber nur ein Container pro Service, zB:
- Container
a1b3d130275a
mit HostnameserviceX.1.nq4rjbae
- Container
65040b1cada6
mit HostnameserviceY.2.m9wl1f1r
Und Sie möchten eine Verbindung zu einem Container eines anderen Dienstes ( serviceX
) von einem Dienst ( serviceY
) herstellen und umgekehrt. Sie müssen nur den --name
Parameter verwenden:
docker service create --name=serviceX serviceX docker service create --name=serviceY serviceY
Sie können sich darauf verlassen, dass der Container a1b3d130275a
nach Hostname serviceX
und Container 65040b1cada6
nach Hostname auflösbar ist serviceY
.
Referenz:
- ¹ Docker - Problem - Kein Zugriff auf Container nach Hostname mit Docker-Overlay-Treiber im Schwarmmodus
- ² machen Sie den Task-Namen als Net-Alias für den Backing-Container
- ³ Definieren Sie das Schema für die Zuordnung von Serviceressourcen zu DNS
- ⁴ Unterstützung für die Schablonen von Alias-Support-Diensten