Prima di tutto chiarirei che, per impostazione predefinita, con o senza il collegamento di un contenitore con un altro, tutto il contenitore ha visibilità su altri contenitori in esecuzione nello stesso host (utilizzando l'IP del contenitore). È possibile modificare questo comportamento utilizzando il flag icc=true
nel daemon docker.
Per quanto riguarda i collegamenti con la finestra mobile-compose, questi vengono generati quando viene creato il contenitore con i collegamenti. Vediamolo con un esempio. Utilizzando questa finestra mobile-compose.yml
web:
build: .
command: python app.py
ports:
- "5000:5000"
volumes:
- .:/code
links:
- redis
redis:
image: redis
Dopo aver eseguito docker-compose up -d
il contenitore web_1
è collegata con il contenitore con redis_1
:
(...)
"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"
], (...)
Ora vogliamo scalare il servizio redis
utilizzando docker-compose scale redis=2
. Dopo averlo eseguito (e creato un nuovo contenitore redis_2
), i collegamenti in web_1
rimangono invariati.
(...)
"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"
], (...)
E 'necessario fermarsi, rimuovere e correre web_1
per vedere questi collegamenti creati:
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"
],(...)
E la /etc/hosts
di web_1
contenitore:
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
Quindi, per generare il nuovo collegamenti, è necessario arrestare, rimuovere ed eseguire nuovamente il contenitore.
Quindi se il servizio A è collegato al servizio B, il servizio A ha accesso a TUTTE le istanze del servizio B? – Gaelan
L'accesso agli IP del contenitore ha sempre accesso, ma se si accede come con l'opzione '--link' (cioè con le voci in/etc/hosts, le variabili di ambiente globali ...) sarà necessario ricreare il contenitore di servizio A. –
Questa non è la mia domanda. Il servizio A è collegato a TUTTE le istanze del servizio B o UNA istanza del servizio B? – Gaelan