配置错误导致容器无法启动的修复方案

作者 : 开心源码 本文共1408个字,预计阅读时间需要4分钟 发布时间: 2022-05-13 共202人阅读

你有没有遇到过一个在正常使用的容器,由于修改某个配置文件,结果导致容器启动失败的情况?
一般碰到这种情况,你在网上找到的资料都是说让你重新创立容器,但重新创立容器可能会使你丢失少量数据或者者做很多重复工作,那么有没有办法在容器无法启动的情况下进行修复呢?
我今天就遇到了这种情况,并成功找到了一个处理办法,供大家参考。

背景形容

我使用镜像 centos/mysql-57-centos7 创立的容器(偷懒没有做挂载目录),主要用来运行mysql数据库,所以这个容器里假如mysqld启动异常的话,容器就挂掉了,而我碰到的就是这个情况。

创立过程如下:

docker run -d --name pinyougou -e MYSQL_ROOT_PASSWORD=123456  -p 33306:3306 -p 33307:22 centos/mysql-57-centos7

悲剧发生的过程

我在这个数据库中已经初始化了很多数据。
现在需要修改my.cnf参数开启binlog,结果修改后造成了mysql启动失败,容器也无法启动。

docker exec -it --user root pinyougou bash

在容器内执行命令

cd /var/lib/mysql/  mkdir logsvi /etc/my.cnf  

在配置文件中添加一行
log-bin=/var/lib/mysql/logs/mysql-bin.log
保存并退出,而后重新启动容器

docker restart pinyougou

而后悲剧就发生了,容器启动不了了,查看日志发现

image.png

重点就是:
You have enabled the binary log, but you haven’t provided the mandatory server-id. Please refer to the proper server start-up parameters documentation

处理方案

求助百度

结果发现大部分都是让你重新安装容器,由于我的容器有少量重要数据,不能采用该方案。
还有一个相对来说有用的信息,说可以在宿主机中找到docker容器的磁盘文件,我找了但没有找到我这个容器的对应信息,可能是docker版本的起因吧,这个方案也不适合我。

看官方资料

把官方docker相关的命令都过了一遍,发现有用的命令都需要容器运行状态才能用。
在山穷水尽之时发现了一个命令docker cp,仔细看了官方说明,觉得有戏,这个命令支持双向拷贝文件,可以在宿主机向容器拷贝,也可以在容器向宿主机拷贝,那么我只要要把mysql配置文件的错误修复过来即可以了。

处理

终于找到理解决方案
于是动手操作,先把容器里面的错误配置文件复制出来,修改后再复制回去即可以了

docker cp  pinyougou:/etc/my.cnf my.cnf

在宿主机打开却发现文件是空的内容,这不合情理啊,我明明改过内容的,回来经过比照确认centos/mysql-57-centos7 容器里面使用了软链接方式,这样复制出来的只是一个断掉的软链接,
需要复制软链接对应的真实文件。

docker cp  pinyougou:/etc/opt/rh/rh-mysql57/my.cnf my.cnf 

把错误修复后,再复制后去即可以愉快的玩耍了。

docker cp  my.cnf pinyougou:/etc/opt/rh/rh-mysql57/my.cnfdocker start pinyougou

image.png

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 配置错误导致容器无法启动的修复方案

发表回复