![](/img/trans.png)
[英]Communication between microservices with docker-compose and traefik
[英]Docker compose and Service communication
我有一個 docker-compose 有 5 個必須通信的服務。 我使用docker network inspect networkname_dafult
檢查了它們是否在同一個網絡中,我可以在同一個網絡中找到所有應用程序。 檢查的結果返回了一個帶有 name 屬性的 json。
```"Name": "app_1",```
在每項服務中,我都使用該名稱發出 http 請求,但它們返回例如"connect ECONNREFUSED 127.0.0.1:5003"
。
如果我訪問 localhost:5003 它可以工作,並且它適用於每個服務。
如果我嘗試使用 localhost:port 從我的應用程序發出 http 請求,它也不會工作。
我的 dockercompose.yml
version: "3.7"
services:
App1:
image: user/app1
ports:
- 5001:5001
links:
- App2
- App3
- App4
- App5
hostname: app1
App2:
image: user/app2
ports:
- 5002:5002
hostname: app2
App3:
image: user/app3
ports:
- 5003:5003
hostname: app3
App4:
image: user/app4
ports:
- 5004:5004
hostname: app4
App5:
image: user/app5
ports:
- 5005:5005
hostname: app5
我嘗試使用主機名、Appx 等發出 http 請求......我無法讓它們相互通信。
我可能在這里缺少什么?
創建一個網絡並將服務的所有部分分配給該網絡。 一個例子:
version: '3.7'
networks:
app_net:
driver: bridge
services:
App1:
image: user/app1
ports:
- 5001:5001
networks:
- app_net
hostname: app1
App2:
image: user/app2
ports:
- 5002:5002
networks:
- app_net
hostname: app2
App3:
image: user/app3
ports:
- 5003:5003
networks:
- app_net
hostname: app3
App4:
image: user/app4
ports:
- 5004:5004
networks:
- app_net
hostname: app4
App5:
image: user/app5
ports:
- 5005:5005
networks:
- app_net
hostname: app5
但可能是我錯過了一些東西。 要考慮的另一件事是使用links
- 更多信息在這里。 此外,如果您要復制+粘貼此代碼,請注意縮進。
Docker-compose 已創建默認網絡。 我運行docker network ls
查看哪些網絡可用並使用docker network inspect mynetwork
以查看我的 docker-compose 上的應用程序是否在同一網絡上運行(它們將是)。
docker 網絡檢查的結果是一個容器對象數組。 每個容器 object 都有一個 name 屬性(這是我用來在服務之間建立 http 連接的信息)
"Containers": {
"01fcacc2b2dc8450c5c75e": {
"Name": "myapp_1",
"EndpointID": "9e3fa9633d9d1692d4f7120c",
"MacAddress": "00:00:00:00:00:00",
"IPv4Address": "172.33.0.2/16",
"IPv6Address": ""
},
在我執行 http 請求的每項服務上,我使用該屬性名稱來發出請求。
axios.get(http://myapp_1)
一個重要的細節是在更改后重建我的容器!
docker build -t myapp.
當我再次運行 docker-compose 時,一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.