【发布时间】:2019-12-31 13:14:30
【问题描述】:
我正在设置一个新容器“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
}
UPD:
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 上重现。
【问题讨论】:
-
需要有关您的 docker 容器创建的更多详细信息。比如端口映射等。
-
@BillyYuan 更新
-
那么,8082在哪里?
-
@BillyYuan 没关系,只是打错了。问题出在 mac 上,一切都可以使用
curl 172.17.0.1:8082/status,但在服务器上,不是 172.17.0.1,不是公共 ip 不起作用。 -
好像是端口映射问题,检查你vps的防火墙设置