Zunächst würde ich klarstellen, dass standardmäßig, mit oder ohne Verknüpfung eines Containers mit anderen, alle Container Sichtbarkeit für andere Container haben, die auf demselben Host laufen (unter Verwendung der Container-IP). Sie können dieses Verhalten mithilfe des Flags icc=true
im Docker-Dämon ändern.
In Bezug auf die Verknüpfungen mit docker-compose werden diese generiert, wenn der Container mit den Verknüpfungen erstellt wird. Lass es uns mit einem Beispiel sehen. Mit diesem Docker-compose.yml
web:
build: .
command: python app.py
ports:
- "5000:5000"
volumes:
- .:/code
links:
- redis
redis:
image: redis
Nach docker-compose up -d
der web_1
Laufbehälter mit dem Behälter mit redis_1
verbunden:
(...)
"Links": [
"/compose_redis_1:/compose_web_1/compose_redis_1",
"/compose_redis_1:/compose_web_1/redis",
"/compose_redis_1:/compose_web_1/redis_1"
], (...)
Nun wollen wir den redis
-Dienst docker-compose scale redis=2
skalieren. Nach dem Ausführen (und Erstellen eines neuen Containers redis_2
), die Links in web_1
bleibt unverändert.
(...)
"Links": [
"/compose_redis_1:/compose_web_1/compose_redis_1",
"/compose_redis_1:/compose_web_1/redis",
"/compose_redis_1:/compose_web_1/redis_1"
], (...)
Es benötigt wird, zu stoppen, zu entfernen und web_1
führen diese Links erstellt, um zu sehen:
docker-compose stop web
docker-compose rm web
docker-compose run -d web
docker inspect compose_web_run_2
(...) "Links": [
"/compose_redis_1:/compose_web_run_2/compose_redis_1",
"/compose_redis_2:/compose_web_run_2/compose_redis_2",
"/compose_redis_1:/compose_web_run_2/redis",
"/compose_redis_1:/compose_web_run_2/redis_1",
"/compose_redis_2:/compose_web_run_2/redis_2"
],(...)
Und die /etc/hosts
von web_1
Behälter:
172.17.0.24 7be2dabea910
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.21 compose_redis_1 8a1297a5b3e4
172.17.0.23 compose_redis_2 069dd46836aa
172.17.0.21 redis 8a1297a5b3e4 compose_redis_1
172.17.0.21 redis_1 8a1297a5b3e4 compose_redis_1
172.17.0.23 redis_2 069dd46836aa compose_redis_2
So die neue zu generieren Links, die Sie benötigen, um den Container zu stoppen, zu entfernen und erneut auszuführen.
Wenn also Service A mit Service B verknüpft ist, hat Service A Zugriff auf ALLE Instanzen von Service B? – Gaelan
Die Verwendung der Container-IPs hat immer Zugriff, aber wenn Sie den Zugriff wie bei '-Link' Option (d. H. Mit den Einträgen in/etc/hosts, globale Umgebungsvariablen ...) müssen Sie Service-A-Container neu erstellen. –
Das ist nicht meine Frage. Ist Dienst A mit ALLEN Instanzen von Dienst B oder ONE-Instanz von Dienst B verknüpft? – Gaelan