Docker下Mysql .cnf文件修改小贴士

一朝选Docker,就要会填坑,今天因为一不小心,改坏了测试环境的mysql配置,导致container启动不起来,然后想方设法恢复容器中文件,费了一中午时间终于在不做新镜像,不起新容器的情况下修复了错误配置。今天就来说说几种修改MySQL配置*.cnf文件修改方法。

环境

  • docker 17.06.0-ce
  • CentOS Linux 7 (Core)
  • MySQL 5.7.18 (docker镜像)

1. 映射目录(未雨绸缪)

在启动映射 /etc/mysql/目录到本地没有亲测 这个初学docker的基本都会。最简单的,修改本地文件重启container 即可。当你对一个镜像结构非常熟悉的时候可以用。 mysql官方镜像上也有说怎么映射这个目录出来,只是当时用的太匆忙这些没有做。

2. 容器bash或sh(紧急处理)

这种方法相对比较容易,用docker exec处理进入bash 或sh 操作即可。

docker exec -it <containerid> bash

安装vim

apt-get update
apt-get install vim

MySQL配置文件所在目录/etc/mysql/

vi /etc/mysql/my.cnf

my.cnf文件内容 在这个环境下,我把my.cnf文件给写错了导致 容器一直启动不起来,然后就无法exec bash了,我只能另球方法把 my.cnf修改回来。

(PS:结束exec bash ctrl+p,ctrl+q 组合命令)

3. docker cp 命令(安慰剂)

https://stackoverflow.com/questions/24553790/how-to-edit-docker-container-files-from-the-host 博主参考这个文章才知道的,虽然最佳答案不是关于cp命令的。官方docker container cp (https://docs.docker.com/engine/reference/commandline/container_cp/) 操作说明

$ docker cp CONTAINER:FILEPATH LOCALFILEPATH
$ vi LOCALFILEPATH
$ docker cp LOCALFILEPATH CONTAINER:FILEPATH

可以将本地的my.cnf 文件拷入到容器中,可以将容器中的文件拷出,解决了用

  • docker exec:只能对运行中的容器操作文件
  • docker run: 加-v映射文件目录出来 参数只能创建新容器

这两个痛点,重新将修改正确的cnf文件拷贝回container,于是乎坏掉container的又可以奇迹般的使用了。

4. 绕圈子解决办法(待测试)

参考 https://github.com/moby/moby/issues/18078

Commit the stopped container:
docker commit $STOPPED_CONTAINER user/test_image
Start/run with a different entry point:
docker run -ti --entrypoint=sh user/test_image

意思就是把坏掉的容器提交成镜像,然后再镜像启动的时候用ti模式加入entrypoint=sh 去修复问题。但是修复完怎么处理,还不知道。

5. 进阶docker container inspect

这个方法不是解决突然改坏文件的,通过这个方法可以访问到容器的配置文件 containerid(系统生成的).json文件。应该是可以修改json文件调整容器启动属性的。这个操作比较高深,也比较危险,目前我还用不到,如果有正好需要的可以研究下,这里只做一个引子。过程可以参考 https://stackoverflow.com/questions/32750748/how-to-edit-files-in-stopped-not-starting-docker-container

窥探一下 我也偷偷的看了一下,看花眼的配置,大家要玩这个配置的时候一定要小心哦~

标签:DockerMySQL 发布于:2019-11-06 05:54:09