docker启动失败问题

内核3.10,systemctl start docker 被阻塞,没有返回,查看状态为启动中。

某兄弟机器安装docker之后,发现systemctl start docker的时候阻塞,由于排查走了一些弯路,记录如下:

level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"
level=info msg="libcontainerd: new containerd process, pid: 46803"
level=warning msg="Docker could not enable SELinux on the host system"
level=info msg="Graph migration to content-addressability took 0.00 seconds"
level=info msg="Loading containers: start."
level=warning msg="Running modprobe nf_nat failed with message: ``, error: exec: \"modprobe\": executable file not found in $PATH"
level=warning msg="Running modprobe xt_conntrack failed with message: ``, error: exec: \"modprobe\": executable file not found in $PATH"
level=info msg="Firewalld running: false"
Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain: iptables failed: iptables --wait -t nat -N DOCKER: iptables v
Perhaps iptables or your kernel needs to be upgraded.
(exit status 3)
 docker.service: main process exited, code=exited, status=1/FAILURE
 Failed to start Docker Application Container Engine.

根据错误记录,确定是创建iptable的链路规则失败,然后查看iptables --list,会报 获取锁失败,

[[email protected] ~]# iptables --list
Another app is currently holding the xtables lock. Perhaps you want to use the -w option

这种情况一般是前面拿锁写规则的iptables进程没有返回,ps -ef 查看对应的进程,发现如下:

[[email protected] ~]# ps -ef |grep -i iptables
root 14967 14926 0 20:05 ? 00:00:00 /usr/sbin/iptables --wait -t nat -D PREROUTING -m addrtype --dst-type LOCAL -j DOCKER

iptables进程确实没有返回,

查看对应的堆栈和内核代码,确定nat模块需要依赖对应的conntrack模块:

int nf_nat_l3proto_register(const struct nf_nat_l3proto *l3proto)
{
    int err;

err = nf_ct_l3proto_try_module_get(l3proto->l3proto);

然后看对应为什么没有加载nf_conntrack-2,发现该环境上的nf_conntrack-2 被backlist了。

另外注意到一个很有趣的问题,在打点测试的时候,发现如下代码:

nf_ct_l3proto_try_module_get(unsigned short l3proto)

{

int ret;

struct nf_conntrack_l3proto *p;

retry:  p = nf_ct_l3proto_find_get(l3proto);

if (p == &nf_conntrack_l3proto_generic) {

ret = request_module("nf_conntrack-%d", l3proto);

if (!ret)

goto retry;

return -EPROTOTYPE;

}

return 0;

}

这里retry应该是有问题的,如果request的nf_conntrack模块被backlist,则会出现一直不退出的情况,而这个流程中会不停提交work_struct到workqueue中,大量的无效work被执行。

原文地址:https://www.cnblogs.com/10087622blog/p/12127258.html

时间: 2024-12-08 23:26:45

docker启动失败问题的相关文章

docker 启动失败

问题 docker 启动服务失败 场景 在Ubuntu中,将docker切换阿里镜像后,运行如下两条命令: sudo systemctl daemon-reload sudo systemctl restart docker 在重启docker服务这,报错信息如下: Job for docker.service failed because the control process exited with error code. See "systemctl status docker.servi

SELinux 引起的docker启动失败

问题描述: 有一台使用中的docker突然发生了故障,然后启动docker失败. 机器的系统版本:CentOS Linux release 7.3.1611 (Core) 最后将这台机器的docker卸载后重装,但是docker还是起不来,启动docker报"Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel."的错误.具体的报错信息如下: [[ema

docker启动失败

启动 docker 映射到宿主机时出现如下错误时:/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint sc_mysql (1bc03030afe9f722ae1e6b46166172a70cf87bcc3f02f0acdac0be2a7f0f0036): (iptables failed: iptables --wait -

Docker 启动失败Starting docker (via systemctl): Job for docker.service failed

Starting docker (via systemctl):  Job for docker.service failed. See 'systemctl status docker.service' and 'journalctl -xn' for details.[FAILED] 解决办法: yum install device-mapper-devel fixed this for me. Using the default configuration of the latest do

“Too many connections”引起MySQL崩溃并启动失败

问题描述: 在部署一套新环境的时候,rancher-server上有14个镜像包一起升级,主要是微服务的写入和查询程序,基本上都是需要去连接MySQL的程序.可能是由于大并发连接数据库,最后起来的几个服务就报错了,docker容器启动失败,报的是MySQL的错误,打印了很长一串sql语句,最后有一个"too many connections". 然后登录MySQL查看当前的最大连接数设置,发现MySQL已经无法登录: [[email protected] ~]# mysql -u ro

CentOS7安装docker启动报错

执行yum install docker -y 命令安装docker 然后启动服务 systemctl start docker,服务启动失败 查询日志文件/var/log/messages,显示报错:Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. 问题原因:此linux的内核中的SELinux不支持 overlay2 graph driver 解决办法:

Mongodb分片配置服务器不同步导致mongos进程启动失败

生产环境中,使用的mongodb分片,由于突然断电,服务再起来的时候发现三个mongos进程中有一个启动失败,多次尝试仍不能启动.查看日志,内容如下: 大概意思是配置服务器configserver数据不同步. 解决办法: 杀死所有mongos进程 连接到每个分片的configserver,运行命令db.runCommand('dbhash') 找到MD5值,这时两个能正常运行的MD5值是一样的,不能正常运行的MD5和上面俩都不一样 删除不能正常运行的dbpath,将能正常运行的dbpath下的数

多学一点(十三)——解决Linux kdump服务启动失败

kdump 是 Linux Kernel 崩溃时的转储机制,简单理解就是在系统启动过程中如果 Kernel 因为某些原因崩溃了,kdump 就会负责记录日志以便排查原因.在 CentOS 6 等 Linux 发行版中,即便采用最小化安装, kdump 也会作为服务安装到系统中,此时可能因为我们对 Linux分配的内存的限制导致 kdump 服务开机启动失败,如图 1 所示: 图-1 kdump启动失败 解决 kdump 启动失败其实很简单,只要修改 grub.conf 文件,改变crashker

ORA-01078和LRM-00109问题导致ORACLE启动失败解决方法

操作环境 SuSE11 + ORACLE11gR2(11.2.0.3) 问题现象 新安装ORACLE启动失败,提示ORA-01078和LRM-00109错误.具体错误现象如下 SQL> startup ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/home/oracle/base/dbs/initora11g.ora'  问题分析 根据错误分析是查找不到参