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

Docker Daemon运行超1小时后无响应问题排查求助

问题排查思路

1. 先处理Elasticsearch遥测DNS超时问题

日志显示查询telemetry.elastic.co时DNS服务器I/O超时,这是明确的异常点,优先解决:

  • 禁用Elasticsearch遥测功能:该请求属于非业务必要的统计请求,直接关闭可消除DNS依赖。在docker-compose.yml的Elasticsearch服务中添加环境变量:
    environment:
      - xpack.telemetry.enabled=false
      - xpack.monitoring.collection.enabled=false
    
  • 配置Docker daemon稳定DNS:修改/etc/docker/daemon.json(无则新建),指定公共DNS服务器避免宿主机DNS不稳定:
    {
      "dns": ["8.8.8.8", "1.1.1.1"]
    }
    
    修改后执行systemctl restart docker生效。

2. 排查Docker服务本身的稳定性

重启Docker能恢复,说明Docker daemon或容器网络栈存在资源泄漏/连接耗尽问题:

  • 监控Docker daemon资源占用:用top或htop跟踪dockerd进程的CPU、内存变化,确认45-60分钟后是否出现资源耗尽。
  • 检查容器网络连接状态:执行netstat -anp | grep docker,观察是否有大量TIME_WAIT/ESTABLISHED连接未释放,导致端口耗尽。
  • 升级Docker版本:若当前版本较旧,可能存在已知的网络/内存泄漏bug,升级到最新稳定版(如24.x系列)测试。

3. 验证Netscalar与Apache的健康检查逻辑

「Http/1.1 Service Unavailable」可能是Netscalar误判后端服务不健康导致流量切断:

  • 检查Netscalar健康检查规则:确认是否对Apache配置了合理的健康检查(如HTTP GET /health接口,超时时间、重试次数设置需匹配服务响应速度)。
  • 查看Apache日志:故障发生时,检查Apache的访问日志(access.log)和错误日志(error.log),确认是否存在进程崩溃、连接池耗尽或大量5xx错误。

4. 限制容器资源避免宿主机耗尽

在docker-compose.yml中为每个容器添加资源限制,防止单个容器占用过多资源拖垮整个Docker栈:

services:
  apache:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
  # Flask、React、Elasticsearch服务同理添加上述资源限制配置

同时确认容器启动顺序:在docker-compose.yml中用depends_on确保Elasticsearch、Flask完全启动后再启动Apache,避免依赖服务未就绪导致的异常。

5. 排查宿主机网络稳定性

  • 测试宿主机DNS可用性:多次执行nslookup telemetry.elastic.co,确认是否存在间歇性超时,排查宿主机本身DNS服务是否稳定。
  • 检查防火墙规则:确认宿主机iptables/ufw规则是否会在运行一段时间后自动刷新,阻断容器间或容器与外部的网络连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:33:20