1. 程式人生 > >Docker ERROR: mysqld failed while attempting to check config

Docker ERROR: mysqld failed while attempting to check config

Docker ERROR: mysqld failed while attempting to check config

因為對docker命令列規則不熟悉,踩了一個巨坑!!!
下面我來說一下具體情況,看看是不是你們也一不小心掉坑裡了呢~

昨天新clone一個虛擬機器,打算學習Docker下配置mysql的基本操作,於是開始正常流程

###使用docker中國映象加速
docker pull registry.docker-cn.com/library/mysql:5.6.42

拉取完成,啟動一個容器,注意了,我輸入的命令是(a46c是IMAGE_ID的前四位)

docker run \
--name MYSQL5.6 \
-d a46c \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306
--character-set-server=utf8 \
--collation-server=utf8_unicode_ci

\是linux命令換行

這條命令看上去每個引數,每個配置都沒有錯誤。好的,來執行一下:

Bang!!!
在這裡插入圖片描述

Google了很多原因,都是針對Mysql本身的,無果…

直到在stackoverflow看到一個與這個問題看似無關的答案,問題地址
在這裡插入圖片描述
意思差不多是說,docker命令是對(指令的)順序敏感的;好的,我們回頭檢查下我們剛才的docker命令;

docker run \
--name MYSQL5.6 \
-d a46c \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306
--character-set-server=utf8 \
--collation-server=utf8_unicode_ci

好的,是我錯了;

到底是怎麼回事呢,這裡說明一下:

這裡對於docker命令,有個小細節就是:

docker ${args_to_docker} run ${args_to_run} image_ref ${cmd_in_container}

比如-e是向容器設定環境變數引數、-p

是指埠對映
這兩項應該是作用於我們run命令的引數,是必須放在run之後,IMAGE_ID之前設定;
如果像上面的那樣順序,就會被mysql容器內部當成要給當前mysql服務設定的引數,mysql當然是不認識它們的,所以才會報錯!

所以正確的一種啟動命令格式是:

docker run \
--name MYSQL5.6 \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306
-d a46c \
--character-set-server=utf8 \
--collation-server=utf8_unicode_ci

總結

由於剛剛學習docker,所以對這種小細節並未注意。這次這個錯誤,也讓我折騰很久,在此記錄下,也給遇到相似問題的朋友們作個參考!