Когато използвате docker-compose v2, не е необходимо да създавате връзки между услугите. Docker 1.9 и 1.10 ви позволяват да се свързвате с други контейнери в същата (персонализирана) мрежа чрез тяхното име.
Трябва да можете да се свържете, като използвате или името на услугата или името на контейнера като име на хост. Като се има предвид, че името на контейнера се генерира от docker-compose, това не е наистина удобно за използване, така че поради тази причина docker-compose също добавя псевдоним с името на услугата към всеки контейнер.
Вземете този много прост пример. Използвах контейнер на Nginx за удобство, но същото трябва да важи и за вашата ситуация;
version: '2'
services:
web_app:
image: nginx
db:
image: nginx
Първо стартирайте проекта (приемайки;
$ docker-compose --project-name=test up -d
Creating network "test_default" with the default driver
Creating test_db_1
Creating test_web_app_1
След това изпратете ping услугата "db" от test_web_app_1
контейнер:
$ 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
Ако проверите test_db_1
контейнер, можете да видите, че docker-compose автоматично добави псевдоним „db“ за test_db_1
контейнер;
$ docker inspect test_db_1
Дава:(само NetworkSettings.Networks
част)
"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"
}
}