Bij gebruik van de docker-compose v2 is het niet nodig om koppelingen tussen services te maken. Docker 1.9 en 1.10 stellen je in staat om via hun naam verbinding te maken met andere containers op hetzelfde (aangepaste) netwerk.
U zou verbinding moeten kunnen maken met de naam van de service of de naam van de container als hostnaam. Aangezien de naam van de container wordt gegenereerd door docker-compose, is dit niet echt handig om te gebruiken, dus om die reden voegt docker-compose ook een alias toe met de servicenaam voor elke container.
Neem dit heel eenvoudige voorbeeld. Ik heb voor het gemak een Nginx-container gebruikt, maar hetzelfde zou voor jouw situatie moeten gelden;
version: '2'
services:
web_app:
image: nginx
db:
image: nginx
Start eerst het project (ervan uitgaande;
$ 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 vervolgens de "db"-service vanuit de test_web_app_1
container:
$ 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
Als je de test_db_1
. inspecteert container, kunt u zien dat docker-compose automatisch een "db"-alias heeft toegevoegd voor de test_db_1
container;
$ docker inspect test_db_1
Geeft:(alleen de NetworkSettings.Networks
deel)
"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"
}
}