簡體   English   中英

Docker 組合和服務通信

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM