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!!!
Docker ERROR: mysqld failed while attempting to check config_第1张图片

Google了很多原因,都是针对Mysql本身的,无果…

直到在stackoverflow看到一个与这个问题看似无关的答案,问题地址
Docker ERROR: mysqld failed while attempting to check config_第2张图片
意思差不多是说,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,所以对这种小细节并未注意。这次这个错误,也让我折腾很久,在此记录下,也给遇到相似问题的朋友们作个参考!

你可能感兴趣的:(Docker,docker,mysql,ERROR)