簡體   English   中英

如何在docker容器中調用公共地址時修復dial tcp i/o超時?

[英]How to fix dial tcp i/o timeout while calling public address in docker container?

我正在設置一個新容器“A”,它從容器“B”調用一些端點。 為什么這些調用總是返回dial tcp 116.2.153.48:8082: i/o timeout

來自容器“A”的調用正在使用公共 IP。 所有容器都部署在 CentOS 7 上。每個容器都有自己的網絡,在這個網絡中有自己的數據庫。 此外,返回錯誤的調用在任何 REST-API 客戶端(例如 Postman)上都可以正常工作。 resolv.conf 文件中的名稱服務器已更改為 google 的 8.8.8.8 和 8.8.4.4

錯誤: error="Post http://116.2.153.48:8082/new_user?email=eto@email.com: dial tcp 116.203.153.48:8082: i/o timeout"

從程序調用:

req, err := http.NewRequest(http.MethodPost, fmt.Sprintf("http://116.2.153.48:8082/new_user?email=%s", user.Email), nil)
    if err != nil {
        return err
    }
    httpClient := &http.Client{}
    resp, err := httpClient.Do(req)
    if err != nil {
        return err
    }

更新:

Docker-compose 的第一個容器:


  payment-ms:
    container_name: payment-ms
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - DB_HOST=payment-ms-db
    ports:
      - 8082:8082

第二個容器的 Docker-compose 文件:

user-ms:
    container_name: user-ms
    build:
      context: .
      dockerfile: Dockerfile
    environment: 
      - DB_HOST=user-ms-db
    ports: 
      - 8080:8080
    depends_on:
      user-ms-db:
        condition: service_healthy

此外,在我的 MacOS 本地機器上,一切正常,僅在使用 CentOS7 的 VPS 上重現問題。

該問題由 2 個問題引發。 首先,容器必須在同一個網絡中。 第二個,當容器在同一個網絡中時,相互調用必須使用屬性容器名稱host。 例如:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                              NAMES
9c6c31b8ec21        user-ms             "./user-ms run"          3 minutes ago       Up 3 minutes             8080/tcp, 0.0.0.0:9980->9980/tcp   user-ms
13863218f942        finance-ms          "./finance-ms run"       3 minutes ago       Up 3 minutes             0.0.0.0:9982->9982/tcp             finance-ms

這意味着, curl 和所有其他從容器user-msfinance-ms調用必須使用finance-ms:9982地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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