You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器运行一段时间后无法连接远程数据库问题排查求助

Docker容器连接数据库超时(初期正常,后期失败)的排查思路

可能原因及对应检查项

1. 网络防火墙/会话超时限制

  • 数据库主机侧:检查firewalld或iptables规则,确认是否存在动态阻断策略(比如基于连接数、请求频率的限制),或者会话超时后未正确放行新连接。执行命令:
    # firewalld规则检查
    firewall-cmd --list-all
    firewall-cmd --list-rich-rules
    # iptables规则检查
    iptables -L -n -v
    
  • 容器宿主机侧:同理检查宿主机的防火墙规则,是否有针对容器网络出口的限制。
  • 中间网络设备:查看路由器、交换机的TCP会话超时配置,部分设备会自动清理长时间空闲的会话,导致后续新连接无法建立。

2. 数据库连接资源耗尽

  • 查看数据库的最大连接数配置,确认是否达到上限:
    # MySQL示例
    mysql -u root -p -e "show variables like 'max_connections';"
    # PostgreSQL示例
    psql -U postgres -c "show max_connections;"
    
  • 查看数据库当前连接数,对比最大值:
    # MySQL示例
    mysql -u root -p -e "show status like 'Threads_connected';"
    # PostgreSQL示例
    psql -U postgres -c "select count(*) from pg_stat_activity;"
    
  • 检查数据库日志,搜索是否有too many connections、connection refused等报错信息,定位连接堆积的原因。

3. 容器/宿主机网络栈异常

  • 容器内部:
    • 对比正常和异常时的路由表:route -n,确认到10.0.3.11的路由是否存在。
    • 检查TCP连接状态,看是否有大量TIME_WAIT/CLOSE_WAIT连接占用资源:
      ss -tulnp | grep -E '(TIME-WAIT|CLOSE-WAIT)'
      
  • 宿主机侧:
    • 查看网络统计错误:ss -s,确认是否有TCP连接超时、拒绝的异常计数。
    • 检查内核网络参数,确认是否存在配置不合理导致连接无法建立:
      sysctl net.ipv4.tcp_fin_timeout
      sysctl net.ipv4.tcp_tw_reuse
      sysctl net.ipv4.ip_local_port_range
      
  • 尝试重启容器,若重启后连接恢复,大概率是容器内部网络栈出现异常(比如内核参数冲突、资源泄漏)。

4. 连接池配置问题

  • 检查应用的连接池配置,是否存在未正确释放连接的情况(比如连接泄漏),导致数据库端连接堆积,最终无法接受新连接。
  • 确认连接池的最大连接数是否超过数据库的max_connections限制,或者连接超时、回收机制配置不合理。

5. 中间代理/负载均衡故障

如果容器与数据库之间存在代理或负载均衡设备:

  • 检查设备的健康检查日志,是否因数据库节点状态异常被剔除。
  • 查看代理的连接日志,是否有连接中断、超时的记录。

内容的提问来源于stack exchange,提问作者cppcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:05:57