Docker服务正常运行一段时间后突然无法访问问题排查
文章目录
- 服务器重启后Docker服务访问失败
- 一、 检查服务容器是否启动
- 如果有容器未启动就启动容器
- 二、检查是否被防火墙屏蔽
- 如果端口未开放,有两种情况:
- 1. 不需要防火墙,直接关掉防火墙服务
- 2. 需要防火墙,添加需要开放的端口
- 三、检查路由IP转发是否开启
- 发现IP转发未开启,解决方案:
- 开启IP转发,在配置文件添加策略
- 问题解析:
- 为什么之前没有手动开启IP转发时`DOCKER`服务依然能正常运行?
服务器重启后Docker服务访问失败
问题描述:
以Docker
运行的web
服务正常运行,配置服务器重启自启动Docker和容器。但是机房断电重启后,web
服务无法正常访问。telnet
服务器的端口不通。
环境:
Application | Version |
---|---|
OS | centos7 |
Docker | 19.03.1 |
docker-compose | 1.24.0 |
一、 检查服务容器是否启动
$ docker-compose ps
发现web
服务器与php
容器都已正常启动
如果有容器未启动就启动容器
$ docker-composer up -d
重启后,访问web
服务是否正常,服务启动可能会需要一些时间,一般能telnet
通端口基本就不会有什么问题。
二、检查是否被防火墙屏蔽
服务容器正常启动依然无法访问,就需要检查一下防火墙了,先查看防火墙状态
$ firewall-cmd --state
not running
发现防火墙未运行,可以排除防火墙的影响
如果是running
则需要进一步排查,端口是否开放
firewall-cmd --list-ports
firewall-cmd --list-services
如果端口未开放,有两种情况:
1. 不需要防火墙,直接关掉防火墙服务
$ sudo systemctl stop firewalld.service
2. 需要防火墙,添加需要开放的端口
$ sudo firewall-cmd --add-port=80/tcp --permanent
$ firewall-cmd --reload
完成后访问web
服务看是否正常
三、检查路由IP转发是否开启
前两步的影响排出后,最后检查IP转发是否开启,一般问题出在这里
$ sysctl net.ipv4.ip_forward
发现IP转发未开启,解决方案:
开启IP转发,在配置文件添加策略
$ echo 'net.ipv4.ip_forward = 1' | sudo tee -a /usr/lib/sysctl.d/50-default.conf
重新加载配置文件(也可以重启network服务)
$ sudo sysctl -p /usr/lib/sysctl.d/50-default.conf
查看IP转发是否开启
IP转发已开启,访问web
服务看是否正常了。
问题解析:
Docker
与宿主机的端口映射是通过iptables
实现的,容器启动时会在iptables
中添加DOCKER
链和n
条DNAT
规则
简单来了解一下,查看一下nat
表的DOCKER
链
$ sudo iptables -t nat -nvL DOCKER
从图中可以看到有两条DNAT
规则,这两条规则分别将宿主机443
、80
端口的报文转发到172.17.3.2
的443
和80
端口上,而172.17.3.2
是分配给nginx
容器的ip
(可以通过docker inspect 容器ID
命令查看)
而这个DNAT
规则需要宿主机开启内核IP转发功能,所以IP转发未开启会导致服务访问失败。
问题的根源找到了,但是产生的原因还没找到。
为什么之前没有手动开启IP转发时DOCKER
服务依然能正常运行?
这是因为Docker daemon
启动时会检查IP_FORWARD
是否开启,如果未开启则临时开启,因为是临时开启所以在network
服务重启后就会失效。服务器断电重启后network服务自然会重启,就有可能导致IP_FORWARD
失效。一般docker
服务正常运行一段时间后却突然访问不了,大不多是因此引起的,可以从这里开始排查。
当然不妨自己来做个试验
- 关闭IP转发功能,此时访问
web
服务失败 - 重启
docker
$ sudo systemctl restart docker
访问web
服务成功,查看IP转发功能是已开启状态。所以docke
r服务访问失败时往往能够通过重启docker
解决,但是不推荐这么做,因为既没真正解决问题容器重启还比较费时。
- 重启
network
$ sudo systemctl restart network
访问web
服务成功,查看IP转发功能是已关闭状态
最后记得将IP转发功能恢复
Docker服务正常运行一段时间后突然无法访问问题排查相关推荐
- linux调度不执行,linux crond.d定时调度执行一段时间后不执行
问题一:/etc/cron.d下的定时任务执行一段时间后不执行 背景:在/etc/cron.d下加了一个定时任务,名为dispute_cron(使用root用户编辑),内容: 28 15 * * * ...
- 服务运行一段时间,redis缓存就不可用,原来是这个锅!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:陈凯玲 来源:https://urlify.cn/RVzIR ...
- java进程运行一段时间停止_kafka总是在启动一段时间后自动停止
kafka 总是在启动一段时间后自动关闭,区间大概是 2.3h~3h 之间. kafka server log 没有错误抛出,log 和正常关闭一模一样. kafka-server.log: [201 ...
- Spring task定时任务执行一段时间后莫名其妙停止的问题
前因: 我写了一个小项目,主要功能是用Spring task定时任务每天定时给用户发送邮件.执行了几个月一直没有问题,前几天,莫名其妙的突然不再发送邮件了. 只好花费一些时间来查看到底是什么原因造成的 ...
- ssh登录一段时间后断开的解决方案
ssh登录一段时间后断开的解决方案 参考文章: (1)ssh登录一段时间后断开的解决方案 (2)https://www.cnblogs.com/zhanzq/p/11102869.html 备忘一下.
- ili9341屏幕在断电一段时间后首次上电白屏问题
现象:断开电源一段时间后,首次上电会白屏,然后反复断电上电都能正常显示. 原因:背光灯的打开对lcd的干扰引起的. 解决办法:在背光的开关驱动电路中加入一个小电容,控制mos管的导通摆率控制,故障排除 ...
- 加载MNIST报错:[WinError 10060] 由于连接方在一段时间后没有正确答复解决办法(亲测)
转载:https://blog.csdn.net/landcruiser007/article/details/79346982 tensorflow加载mnist数据集,一些书上和博客中的代码如下: ...
- java内存溢出让tomcat停止_java - 使用JVM Open J9一段时间后,应用程序(tomcat)停止响应 - 堆栈内存溢出...
我正在使用Open J9,一段时间后我的应用程序停止响应..在生产中发生了2个小时后,在本地设法使用JMeter进行模拟. 应用程序(tomcat)只是停止响应,我需要重新启动才能将其取回. 问题是日 ...
- mysql 空闲几分钟速度变慢,MYSQL 运作一小段时间后,速度变得奇慢。而CPU基本空闲状态...
当前位置:我的异常网» MySQL » MYSQL 运作一小段时间后,速度变得奇慢.而CPU基本 MYSQL 运作一小段时间后,速度变得奇慢.而CPU基本空闲状态 www.myexceptions.n ...
最新文章
- 给ThinkPad E470C 换个高分屏(1080P)
- php简单实例,php实现推荐功能的简单实例
- dockerfile构建mysql_Dockerfile在linux上构建mysql8镜像并创建数据库-Go语言中文社区
- mac USB串口工具配置
- gdb可以查询执行文件的宏, 但是查询不了o文件的宏
- 中小学招生强化就近入学;首次全女性太空行走取消;苹果付费新闻APP奔溃;NASA火星上发现鹅卵石;这就是今天的大新闻...
- 交换机多少钱一个?影响工业交换机价格的因素?
- C和C++的关系, namespace, struct , class
- (转)惊魂24小时!真实还原光大“乌龙指”事件,比小说还离奇
- 基于 CODING 的 Spring Boot 持续集成项目 1
- 化学专业与计算机的联系PPT,计算机在化学中的应用ppt
- 2023年重庆邮电大学计算机科学与技术(802)初试经验贴
- 在MingW上更新的G ++获取大量错误消息(G++ updated on MingW gets massive error messages)
- 【无标题】人工智能的定义
- 云虎拜年,好运连连!虎年限定三件套来啦
- 【网页制作】CSS尺寸样式属性
- c# wifi串口通信_在C#中实现串口通信的方法
- 实用!7个强大的Python机器学习库!⛵
- excel oracle 可为空,类似excel定位功能用不为空值填充为空列,用sql怎么实现
- 商界大忌,你占了几条?