Khi sử dụng docker-compo v2, bạn không cần tạo liên kết giữa các dịch vụ. Docker 1.9 và 1.10 cho phép bạn kết nối với các vùng chứa khác trên cùng một mạng (tùy chỉnh) thông qua tên của chúng.
Bạn có thể kết nối bằng tên của dịch vụ hoặc tên của vùng chứa như một tên máy chủ. Do tên của vùng chứa được tạo bởi docker-comp, điều này không thực sự thuận tiện để sử dụng, vì vậy, vì lý do đó, docker -omp cũng thêm một bí danh với tên dịch vụ cho mỗi vùng chứa.
Lấy ví dụ rất đơn giản này. Tôi đã sử dụng vùng chứa Nginx để thuận tiện, nhưng điều tương tự cũng sẽ áp dụng cho trường hợp của bạn;
version: '2'
services:
web_app:
image: nginx
db:
image: nginx
Đầu tiên hãy bắt đầu dự án (giả sử;
$ docker-compose --project-name=test up -d
Creating network "test_default" with the default driver
Creating test_db_1
Creating test_web_app_1
Sau đó ping dịch vụ "db" từ bên trong test_web_app_1
vùng chứa:
$ 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
Nếu bạn kiểm tra test_db_1
vùng chứa, bạn có thể thấy rằng docker-soạn đã tự động thêm bí danh "db" cho test_db_1
thùng chứa;
$ docker inspect test_db_1
Cung cấp:(chỉ NetworkSettings.Networks
phần)
"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"
}
}