記錄一次Docker修改配置文件致使容器沒法啓動

問題描述

MySQL5.7開始默認啓用only_full_group_by選項,因而我在配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf)中加了mysql

SET sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

修改了docker容器中的配置信息,因爲配置文件寫錯,或者配置文件格式錯誤等緣由,致使容器沒法再次啓動sql

方法一

docker容器的一些配置信息通常在var/lib/docker/overlay下面,咱們到此目錄找到對應的配置,修改後便可從新啓動docker

1. 查詢日誌
docker logs 容器名/容器id
ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"

2019-08-20T12:20:57.919628Z 0 [ERROR] unknown variable 'SET sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
2019-08-20T12:20:57.923248Z 0 [ERROR] Aborting

ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"

2019-08-20T12:21:58.445399Z 0 [ERROR] unknown variable 'SET sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
2019-08-20T12:21:58.448990Z 0 [ERROR] Aborting

由錯誤可知我在配置文件配置了錯誤的參數 SET sql_mode=...
該參數是我配置在mysql容器配置文件 mysqld.cnf中的,因此咱們要找到該配置文件,而後將 SET sql_mode=... 刪除ubuntu

2. 查找文件
mandy@ubuntu:~$ sudo find / -name mysqld.cnf
/tmp/mysqld.cnf
/var/lib/docker/overlay2/967bef783b7ae60e477382ac25f015793f8e3047f7bbca203759ed1ab1b2a661/diff/etc/mysql/mysql.conf.d/mysqld.cnf
/var/lib/docker/overlay2/ddef71f08d9dc90ceb354850a89e59817c5e730b8fdea07f0916eb95e2637dce/diff/etc/mysql/mysql.conf.d/mysqld.cnf
/var/lib/docker/overlay2/ddef71f08d9dc90ceb354850a89e59817c5e730b8fdea07f0916eb95e2637dce/merged/etc/mysql/mysql.conf.d/mysqld.cnf

備註:你可能會找到多個配置文件,好比你啓動了多個mysql容器就會出現多個mysqld.cnf,找到對應你當前錯誤的mysqld.cnf而後修改重啓。ide

3. 修改配置文件,重啓

方法二

把docker容器中的配置文件複製到主機中,而後再主機中修改,修改完成後再複製到docker容器中.net

1. 複製docker容器的文件到主機中
docker cp 容器id:docker容器中配置文件路徑  主機路徑
docker cp 2f9845c5e47810a984c5e2ae5a5e5c1e041a746079682e6b464089ca1b1c5fc2:/etc/mysql/mysql.conf.d/mysqld.cnf /tmp/mysqld.cnf
2. 修改配置文件中出錯的部分
3. 配置文件到docker容器中
docker cp 主機文件路徑 容器id:docker容器中配置文件路徑
docker cp /tmp/mysqld.cnf 2f9845c5e47810a984c5e2ae5a5e5c1e041a746079682e6b464089ca1b1c5fc2:/etc/mysql/mysql.conf.d/mysqld.cnf
4. 重啓容器

總結

兩種方法都可以解決容器在沒法啓動的狀況下,修改容器中的配置文件。我的比較推薦使用第二種方法,主要知道是哪一個配置文件便可複製到主機中,自由修改。日誌

參考:code

  1. 至於 only_full_group_by 問題可參考此
  2. Docker修改沒法啓動的容器的配置文件
相關文章
相關標籤/搜索