När du använder docker-compose v2 behövs det inte för att skapa länkar mellan tjänster. Docker 1.9 och 1.10 låter dig ansluta till andra behållare på samma (anpassade) nätverk genom deras namn.
Du bör kunna ansluta med antingen namnet på tjänsten eller namnet på behållaren som ett värdnamn. Med tanke på att namnet på behållaren genereras av docker-compose är detta inte riktigt bekvämt att använda, så av den anledningen lägger docker-compose också till ett alias med tjänstens namn till varje behållare.
Ta detta mycket enkla exempel. Jag har använt en Nginx-behållare för enkelhetens skull, men detsamma borde gälla din situation;
version: '2'
services:
web_app:
image: nginx
db:
image: nginx
Starta först projektet (förutsatt;
$ docker-compose --project-name=test up -d
Creating network "test_default" with the default driver
Creating test_db_1
Creating test_web_app_1
Pinga sedan "db"-tjänsten från test_web_app_1
behållare:
$ docker exec -it test_web_app_1 ping -c 2 db
PING db (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.108 ms
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.243 ms
--- db ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.108/0.175/0.243/0.068 ms
Om du inspekterar test_db_1
container kan du se att docker-compose automatiskt lade till ett "db"-alias för test_db_1
behållare;
$ docker inspect test_db_1
Ger:(bara NetworkSettings.Networks
del)
"Networks": {
"test_default": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"db",
"002b1875e61f"
],
"NetworkID": "0f9e2cddeca79e5a46c08294ed61dee273828607f99014f6410bda887626be70",
"EndpointID": "a941ab95586a8fdafc5075f9c5c44d745f974e5790ef6048b9e90115a22fb31f",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:02"
}
}