一、问题背景

 

在客户处服务器上(CentOS7.6)上用docker部署一个服务,不管是使用docker的二进制包还是直接yum安装,就是死活起不来,执行systemctl start docker 启动卡住不动,另开一个窗口可以看到docker进程。

docker ps,docker images等都是卡住,strace发现都是卡住在网络等待,排查docker daemon日志没有发现可疑点或者有异常日志但随着异常日志排查并没有解决问题,重装docker,重启设备未解决问题。

一度以为是什么操作系统内核版本bug,但是找了一台相同版本的云主机,启动毫无问题。

 

 

二、问题排查

 

找一台docker正常运行的机器进行对比排查,以期能够找到问题点。

正常机器 systemctl status docker 结果如下:

异常机器 systemctl status docker 结果如下:

很显然异常机器多了一条:

/usr/sbin/iptables --wait -t nat -D PREROUTING -m addrtype --dst-type LOCAL -j DOCKER

 

ps查看,就是iptables卡死(处于D状态):

# ps aux | grep iptables

据此,基本得出是iptables卡住导致docker卡住,这是docker启动过程中要建立iptables策略为后续docker网络做准备,这个过程失败导致卡住。

看上面的意思,nat策略创建夯住了,无法nat,那docker还玩啥!

 

 

三、解决方法

iptables不能创建,基本上可以猜测是安全策略导致的,跟操作系统镜像有关,可能做了相关的安全加固。

咨询相关人员解决即可,比如我这里是将/etc/modprobe.d/目录下iptables和nat相关黑名单放开就可以了。

 

# ll /etc/modprobe.d/

 

# cat  /etc/modprobe.d/blacklist.conf

iptabes卡住,在docker启动日志和调试日志中看不到相关的日志,浪费大量时间排查。

 

/etc/modprobe.d/ 目录下文件相关功能,需多查看点文档,熟悉一下内核模块加载与屏蔽。

 

四、参考 

 

安装docker18.09.6后,无法启动

https://www.it610.com/article/1290967739489394688.htm

 

Linux中升级更新命令yum upgrade和yum update的区别

https://zhidao.baidu.com/question/1436001668988118579.html?qq-pf-to=pcqq.group

 

systemctl start docker一直卡住排查

https://blog.csdn.net/u012500825/article/details/102924754

 

Kernel module (简体中文)

https://wiki.archlinux.org/index.php/Kernel_module_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

 

How do I prevent a kernel module from loading automatically?

https://access.redhat.com/solutions/41278

 

How to blacklist kernel modules?

https://askubuntu.com/questions/110341/how-to-blacklist-kernel-modules

What is the difference between /etc/modules and /etc/modprobe.d/?

https://askubuntu.com/questions/1024777/what-is-the-difference-between-etc-modules-and-etc-modprobe-d

https://unix.stackexchange.com/questions/75631/excluding-kernel-modules-through-etc-modprobe-d-blacklist-conf-does-not-work

 

strace命令

https://www.cnblogs.com/duanxz/p/6012768.html

 

强大的strace命令用法详解

https://blog.csdn.net/cs729298/article/details/81906375

https://www.cnblogs.com/machangwei-8/p/10388883.html

 

Linux进程照妖镜strace命令

https://zhuanlan.zhihu.com/p/69527356

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐