问题描述
调用 /summary 接口时返回 HTTP 500,日志显示无法解析上游服务域名:
requests.exceptions.ConnectionError:
HTTPSConnectionPool(host='appfuwu.189.cn', port=9021):
Max retries exceeded with url:
/query/qryImportantData
Caused by NameResolutionError:
Failed to resolve 'appfuwu.189.cn'
影响
容器 china-telecom-monitor 无法访问中国电信上游接口:
https://appfuwu.189.cn:9021/query/qryImportantData
导致 /summary 请求失败并返回 500。
原因
宿主机 DNS 解析正常,但 Docker 容器内 DNS 解析失败:
gaierror(-3, 'Try again')
处理过程
临时修改容器 DNS 配置:
docker exec -u 0 china-telecom-monitor sh -c \
'printf "nameserver 223.5.5.5\nnameserver 114.114.114.114\n" > /etc/resolv.conf'
验证容器内域名解析:
docker exec china-telecom-monitor getent hosts appfuwu.189.cn
验证 Python 请求:
确认 DNS、TCP、TLS 和 HTTP POST 请求均已恢复。
修复建议
在 Docker Compose 中持久化 DNS 配置:
services:
app:
dns:
- 223.5.5.5
- 114.114.114.114
重新创建容器:
docker compose up -d --force-recreate
同时为上游请求增加超时和异常处理,避免网络故障直接导致未处理的 500:
response = self.session.post(
url,
headers=self.headers,
json=body,
timeout=(10, 30),
)
建议将上游连接失败映射为 503 Service Unavailable,而不是直接返回 500。
验证结果
- 容器内 DNS 解析恢复
appfuwu.189.cn:9021 连接正常
- 上游 POST 请求返回 HTTP 200
/summary 接口恢复正常
注意事项
测试时使用了 verify=False,产生了 InsecureRequestWarning。生产环境应启用 TLS 证书验证,并确保容器内已安装 ca-certificates。
问题描述
调用
/summary接口时返回 HTTP 500,日志显示无法解析上游服务域名:影响
容器
china-telecom-monitor无法访问中国电信上游接口:导致
/summary请求失败并返回 500。原因
宿主机 DNS 解析正常,但 Docker 容器内 DNS 解析失败:
处理过程
临时修改容器 DNS 配置:
验证容器内域名解析:
docker exec china-telecom-monitor getent hosts appfuwu.189.cn验证 Python 请求:
确认 DNS、TCP、TLS 和 HTTP POST 请求均已恢复。
修复建议
在 Docker Compose 中持久化 DNS 配置:
重新创建容器:
同时为上游请求增加超时和异常处理,避免网络故障直接导致未处理的 500:
建议将上游连接失败映射为
503 Service Unavailable,而不是直接返回500。验证结果
appfuwu.189.cn:9021连接正常/summary接口恢复正常注意事项
测试时使用了
verify=False,产生了InsecureRequestWarning。生产环境应启用 TLS 证书验证,并确保容器内已安装ca-certificates。