版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zouguo1211/article/details/84960898
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,所以对这种小细节并未注意。这次这个错误,也让我折腾很久,在此记录下,也给遇到相似问题的朋友们作个参考!