W przypadku korzystania z docker-compose v2 nie jest konieczne tworzenie łączy między usługami. Docker 1.9 i 1.10 umożliwiają łączenie się z innymi kontenerami w tej samej (niestandardowej) sieci za pomocą ich nazwy.
Połączenie powinno być możliwe przy użyciu nazwy usługi lub nazwa kontenera jako nazwę hosta. Biorąc pod uwagę, że nazwa kontenera jest generowana przez docker-compose, nie jest to zbyt wygodne w użyciu, więc z tego powodu docker-compose dodaje również alias z nazwą usługi do każdego kontenera.
Weźmy ten bardzo prosty przykład. Użyłem kontenera Nginx dla wygody, ale to samo powinno dotyczyć Twojej sytuacji;
version: '2'
services:
web_app:
image: nginx
db:
image: nginx
Najpierw uruchom projekt (zakładając;
$ docker-compose --project-name=test up -d
Creating network "test_default" with the default driver
Creating test_db_1
Creating test_web_app_1
Następnie pinguj usługę „db” z poziomu test_web_app_1
kontener:
$ 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
Jeśli sprawdzisz test_db_1
kontenera, widać, że docker-compose automatycznie dodał alias „db” dla test_db_1
kontener;
$ docker inspect test_db_1
Daje:(tylko NetworkSettings.Networks
część)
"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"
}
}