docker进程启动失败处理

背景

  • 有同学反馈在启动docker的时候遇到了如下问题:docker启动报错

    [root@wuxianfeng ~]# systemctl start docker
    Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
  • 他说看了status,也一头雾水

    [root@wuxianfeng ~]# systemctl status docker
    ● docker.service - Docker Application Container Engine
    Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
    Active: failed (Result: start-limit) since Mon 2022-09-05 10:49:47 CST; 33s ago
    Docs: https://docs.docker.com
    Process: 1519 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
    Main PID: 1519 (code=exited, status=1/FAILURE) Sep 05 10:49:45 wuxianfeng systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
    Sep 05 10:49:45 wuxianfeng systemd[1]: Failed to start Docker Application Container Engine.
    Sep 05 10:49:45 wuxianfeng systemd[1]: Unit docker.service entered failed state.
    Sep 05 10:49:45 wuxianfeng systemd[1]: docker.service failed.
    Sep 05 10:49:47 wuxianfeng systemd[1]: docker.service holdoff time over, scheduling restart.
    Sep 05 10:49:47 wuxianfeng systemd[1]: Stopped Docker Application Container Engine.
    Sep 05 10:49:47 wuxianfeng systemd[1]: start request repeated too quickly for docker.service
    Sep 05 10:49:47 wuxianfeng systemd[1]: Failed to start Docker Application Container Engine.
    Sep 05 10:49:47 wuxianfeng systemd[1]: Unit docker.service entered failed state.
    Sep 05 10:49:47 wuxianfeng systemd[1]: docker.service failed.

解决

  • 出现无法启动docker的可能其实是非常多的,他依赖的东西发生了异常就有可能无法启动(比如selinux,比如权限,比如启动所需的配置文件等)
  • 没有说固定的哪个方法就能解决所有的问题,日志是分析问题的重要手段。
  • systemctl start docker的提示信息告诉了你两个处理问题的方向

systemctl status docker 查看docker的状态

  • 很多问题在这里会输出线索,本例没有。也难怪他一头雾水。

journalctl -xe 查看系统日志

  • 我摘录部分
-- Unit docker.service has begun starting up.
Sep 05 10:49:42 wuxianfeng dockerd[1515]: unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '\n' in string lite
Sep 05 10:49:42 wuxianfeng systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Sep 05 10:49:42 wuxianfeng systemd[1]: Failed to start Docker Application Container Engine.
-- Subject: Unit docker.service has failed
-- Defined-By: systemd
  • 本例就可以用这个信息来解决,注意上面的第二行清晰的提示了无法用你提供的/etc/docker/daemon.json来配置dockerd,因为有invalid character '\n' in string lite。

  • 查看下daemon.json的内容

    [root@wuxianfeng ~]# cat /etc/docker/daemon.json
    {
    "debug: true
    }
  • 果然错了,少了个引号,加上后启动ok。

  • 可以看到这个问题的处理其实非常简单,只需根据提示,稍微有点json的基础你就知道了。

引申一:docker其他调试方法

取自 《docker入门与实践》

开启 Debug 模式

在 dockerd 配置文件 daemon.json(默认位于 /etc/docker/)中添加

{
"debug": true
}

重启守护进程。

$ sudo kill -SIGHUP $(pidof dockerd)

此时 dockerd 会在日志中输入更多信息供分析。

检查内核日志

$ sudo dmesg |grep dockerd
$ sudo dmesg |grep runc

Docker 不响应时处理

可以杀死 dockerd 进程查看其堆栈调用情况。

$ sudo kill -SIGUSR1 $(pidof dockerd)

重置 Docker 本地数据

注意,本操作会移除所有的 Docker 本地数据,包括镜像和容器等。

$ sudo rm -rf /var/lib/docker

docker logs 查看容器的日志

  • 常用于解决容器启动、运行异常的分析

引申二:journalctl

  • journalctl 是查询系统日志的一个工具,功能非常强大

  • -x:查看指定目录

    -x, --catalog
    Augment log lines with explanation texts from the message catalog. This will add explanatory help texts to log messages in the output where this is available. These short help texts will explain the context of an error or log event, possible solutions, as well as pointers to support forums, developer documentation, and any other relevant manuals. Note that help texts are not available for all messages, but only for selected ones. For more information on the message catalog, please refer to the Message Catalog Developer Documentation[4]
  • -e:从尾部看日志

    -e, --pager-end
    Immediately jump to the end of the journal inside the implied pager tool. This implies -n1000 to guarantee that the pager will not buffer logs of unbounded size. This may be overridden with an explicit -n with some other numeric value while -nall will disable this cap. Note that this option is only supported for the less(1) pager.
  • 不做展开,可以参考:https://zhuanlan.zhihu.com/p/410995772

FAQ docker进程启动失败处理案例分享的更多相关文章

  1. CentOS7+CDH5.14.0安装CDH错误排查:Hue错误: Load Balancer 该角色的进程启动失败

    Hue错误: Load Balancer 该角色的进程启动失败 解决办法:主机能够联网情况下,直接运行如下命令即可在线安装openssl.httpd 需要提前安装环境  httpd, mod_ssl ...

  2. 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”的路径不存在。

    因为某些原因重新安装1了vscode 和node  遇到了两个棘手的问题 ctrl + ~  打开终端提示 " 终端进程启动失败: shell 可执行文件"C:\Windows\S ...

  3. Docker安装、命令详情、层级架构、docker服务启动失败解决方法

    容器背景: 层级架构:  容器对比传统化虚拟机: 可以把docker理解成是一款自带软件(比如:nignx.tomcat.....)的镜像操作系统(首先是要下载镜像) 以下是Windows环境安装Do ...

  4. Docker容器启动失败 Failed to start Docker Application Container Engine的解决办法

    当编辑完daemon.json时,准备systemctl start docker.service启动docker时报以下错误: 网上查找的诸多方法都不行,后面看到一篇类似的文章:http://www ...

  5. Docker容器启动失败 Failed to start Docker Application Container Engine

    1.在k8s mster节点执行 1.kubectl get nodes 发现node节点没起来 [root@guanbin-k8s-master ~]# kubectl get nodes NAME ...

  6. docker.service启动失败:Unit not found

    docker.service启动失败:Unit not found 版权声明:本文为博主原创文章,未经博主允许不得转载. 背景 因为最近一直在折腾Kubernetes集群版本升级.Docker版本升级 ...

  7. “格式化HDFS后,HMaster进程启动失败”的问题解决

    用 hadoop namenode -fromat 格式化后,用./start-hbase.sh 启动HMaster和HRegionServer,但是过几秒种后HMaster进程自动关闭,HRegio ...

  8. SELinux 引起的 Docker 启动失败

    问题描述 Linux OS 版本 CentOS Linux release 7.2.1511 (Core) 启动Docker service docker start 启动失败信息 原因分析 Erro ...

  9. 记一次docker安装成功,启动失败的原因

    问题 按照错误提示,先查看docker的状态: systemctl status docker 可以看到,非常明显的一行大红字:Failed to start Docker Application C ...

  10. ambari下 hive metastore 启动失败

    由字符集引起的hive 元数据进程启动失败 解决方法新增 这2句话 reload(sys)sys.setdefaultencoding('utf8')

随机推荐

  1. Datatable 数据源

    数据源类型 Datatable可以使用三种基本的JavaScript数据类型作为数据源 数组(Arrays[]) 对象(objects{}) 实例(new myclass()) 目前使用过的为前两种, ...

  2. 少走点弯路:Wiki.js 通过 Generic OAuth2 进行身份验证

    Wiki.js介绍 Wiki.js 是一个开源的百科全书系统,可以用来搭建自己的知识库.文档库等. 官网 | GitHub 后续内容中的Wiki.js会用Wiki代替. 本文环境:Wiki 2.5.2 ...

  3. Go语言基础-从菜鸟到火鸡

    课程介绍: 1.概述和环境搭建 2.程序开发 3.数据类型 4. 指针 5. 标志符 6. 运算符 7. 进制介绍 8.流程控制 9.循环控制 10.break与continue 11.函数 12.g ...

  4. day03-实现02

    实现02 3.实现任务阶段3-处理Servlet02 3.3Servlet规范设计 3.3.1MyServlet 该类模仿Servlet接口,为了简化,只声明了三个方法:init(),service( ...

  5. <一>关于运算符重载

    C++的运算符重载:使对象的运算表现得和编译器内置类型一样 如下代码,如果T是整形,那很好理解,但是如果 T 是一个 Student 类, a + b ?怎么操作,两个学生类怎么相加? 这个就是我们要 ...

  6. 使用Python实现多线程、多进程、异步IO的socket通信

    多线程实现socket通信服务器端代码 import socket import threading class MyServer(object): def __init__(self): # 初始化 ...

  7. JavaScript入门③-函数(2)原理{深入}执行上下文

    00.头痛的JS闭包.词法作用域? 被JavaScript的闭包.上下文.嵌套函数.this搞得很头痛,这语言设计的,感觉比较混乱,先勉强理解总结一下. 为什么有闭包这么个东西?闭包包的是什么? 什么 ...

  8. eval解析的函数传参 object array

    1 const fn = (...args) => { 2 console.log(...args) 3 } 4 5 const handleEval = (fnName,...args) =& ...

  9. kali2021.4a安装angr(使用virtualenv)

    在Linux中安装各种依赖python的软件时,最头疼的问题之一就是各个软件的python版本不匹配的问题,angr依赖python3,因此考虑使用virtualenv来安装angr Virtuale ...

  10. socet网络编程

    一. 网络模型 应用层   -----     HTTP协议 传输层   -----     TCP协议 网络层   -----       IP协议 链路层   -----     以太网协议 二. ...