Docker v23.0 启动报错 Job for docker. service failed because the control process exited with error code

背景介绍

最近最新版的 Kubernetes v1.27 发布了,打算重新装一套集群,结果在安装 Docker 的时候启动不起来了,报下面的错误:

Job for docker. service failed because the control process exited with error code

错误分析

网上的解决方案大同小异,都是修改 docker.service 文件或者是在 daemon.json 中增加代码的都试过了,都没有用。

现有的方法都试过了都没有用,那是不是版本的问题?

Docker 官网才发现 Docker 在最近的一段时间发布了 23.0 版本,直接从 v20v23 ,中间直接跳过两个大版本,具体原因也没说。

解决方案:

知道了原因就可以解决问题了,这里提供两种解决方案:回滚到 v20 低版本、修改 v23 配置文件。

回滚到 v20 低版本

先把系统上的最新的版本 Docker v23 卸载干净,然后重新安装 Docker v20

修改 v23 配置文件

如果不想降级,另一种解决方案就是修改配置文件。

Docker 配置文件 daemon.json/etc/docker/ 目录下,daemon.json 文件一般是自动生成或者是手动创建,但是在新版本 Docker v23 中,这个文件名改成 daemon.conf 了,具体是因为什么原因改动官方也没说。

解决方法也很简单,直接将 daemon.json 修改为 daemon.conf 即可,文件中配置内容完全一样。

修改文件名:

mv daemon.json daemon.conf

重启服务:

systemctl restart docker

推荐使用

推荐使用第一种方案,即回滚到 v20 低版本。

因为 Docker v23 会导致 kubernetes initerror execution phase couldn‘t initialize a Kubernetes cluster 的错误:

Unfortunately, an error has occurred:
	timed out waiting for the condition

This error is likely caused by:
	- The kubelet is not running
	- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
	- 'systemctl status kubelet'
	- 'journalctl -xeu kubelet'

Additionally, a control plane component may have crashed or exited when started by the container runtime.
To troubleshoot, list all containers using your preferred container runtimes CLI.

Here is one example how you may list all Kubernetes containers running in docker:
	- 'docker ps -a | grep kube | grep -v pause'
	Once you have found the failing container, you can inspect its logs with:
	- 'docker logs CONTAINERID'

error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster	

原因没找到,据我猜测大概原因是因为 Docker 版本太新了,配置文件的后缀名改动影响了 Kubernetes

因为 Kubernetes1.24 之后就移除了 dockershim,所以安装最新版本的 Kubernetes 还想用 Docker 的话就需要安装 cri-dockerd,大概率是因为 cri-dockerd 读取的配置还是低版本的 daemon.json,而最新版本 Docker v23 的配置文件 daemon.conf 目前 cri-dockerd 还不支持。

### 解决CentOS 8 Docker服务启动失败问题 当遇到`docker.service`无法正常启动的情况时,通常会伴随错误日志提示控制进程退出并带有错误码。对于此类问题,可以采取一系列措施来排查和修复。 #### 检查现有配置和服务状态 为了更好地理解具体原因,建议先查看当前系统的Docker服务状态以及任何可能存在的故障记录: ```bash $ systemctl status docker.service ``` 如果发现有类似于`control process exited with error code`的信息,则表明存在某些阻碍Docker成功初始化的因素[^1]。 #### 验证依赖项安装情况 确认是否已经正确设置了官方YUM仓库地址用于获取最新版本的Docker CE包文件,并执行更新操作以确保所有必要的组件都处于最新状态: ```bash $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo $ sudo yum makecache fast $ sudo yum install -y docker-ce docker-ce-cli containerd.io ``` 上述命令序列可以帮助建立正确的软件源链接并完成基础环境搭建工作[^2]。 #### 排除内核模块加载异常的影响 有时由于缺少特定驱动程序的支持或是其他因素干扰到了核心功能模块的成功装载,这也会间接影响到容器引擎的表现形式。因此有必要进一步调查是否有与此关联的任务未能顺利完成: ```bash $ systemctl --state=failed | grep systemd-modules-load.service ``` 一旦识别出确实存在问题的地方,可以根据实际情况调整相应的引导参数或者尝试重新编译定制化的Linux kernel image来解决问题[^3]。 通过以上几个方面的综合考量与处理手段的应用,应该能够有效缓解乃至彻底消除因各种潜在隐患所引发的一系列连锁反应,从而让Docker能够在CentOS 8平台上稳定运行起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值