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
相关产品推荐
相关产品推荐

