Docker PHP/Nginx容器运行数小时后请求超时问题排查
Docker容器网络资源耗尽
长时间处理3万+请求后,容器内大量TCP连接可能处于TIME_WAIT状态未被及时回收,耗尽了可用端口资源或宿主机的连接跟踪表(conntrack)配额。新请求无法建立连接,最终触发超时。docker compose down/up仅重启容器,未彻底清理网络栈资源;而重建容器会重置网络命名空间,重新分配端口和连接资源,因此能暂时恢复。电商平台反爬机制触发
持续高频请求后,平台大概率对你的出口IP(容器宿主机IP或代理IP)做了限流甚至临时封禁,导致后续请求无法正常获取响应,最终触发超时。更换HTTP客户端不会改变IP特征,所以问题依旧;若你的环境中重建容器会切换出口IP(比如动态网络配置),则会暂时恢复,直到再次触发反爬规则。应用或容器内系统资源泄漏
比如应用存在内存泄漏,运行数小时后内存占用过高,导致系统调度卡顿,HTTP请求的处理和响应超时;或是文件句柄泄漏,打开的socket句柄数量达到系统上限,新请求无法创建连接。重建容器会重置进程资源,因此能解决问题,但运行一段时间后资源再次耗尽,问题复发。DNS解析异常
容器长时间运行后,DNS缓存出现错乱,无法正常解析电商平台域名,导致请求无法发送到目标服务器,触发超时。重建容器会重置DNS配置和缓存,恢复解析能力。宿主机网络栈异常
宿主机的网络资源(如端口池、conntrack表)被耗尽,或是网络驱动出现异常,导致容器内的出站请求无法正常完成。这种情况下,单纯重启容器无法释放宿主机的网络资源,只有重建容器(或重启宿主机)才能重置相关资源,暂时解决问题。
内容的提问来源于stack exchange,提问作者Ilyas

