下面是我使用的镜像,以及mysql实例运行脚本
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d centos/mysql-57-centos7
启动后,在宿主机用yum安装了mysql,执行,可以连接,宿主机安装yum install -y mysql非常重要,否则用navicat是连接不上的,但只要装了,哪怕你yum remove mysql,貌似都可以连上,这个很神奇
mysql -uroot -p -h 127.0.0.1
执行,不可以,原因这个会找宿主机的sock进行连接,但是宿主机和容器直接无法通过sock互联,所以,报mysql.sock找不到,如果你想让它找到,那就得将这个文件夹和容器的设为共享卷,但是风险很大,因为这个目录宿主机还要放其他东西呢!两者共享必然混乱,请不要如此尝试
mysql -uroot -p
所以,就只能用tcp/ip链接
进入容器内,如果用localhost方式登录也是莫名奇妙报错,必须用-h 127.0.0.1才能进去,然后藏重新改密码
docker exec -it --user root mysql /bin/bash
先用-h 127.0.0.1进去,再用下面的SQL改,然后flush,重启docker就可以,但感觉没意义,可能docker启动时,-e 环境没有配置localhost的密码,只是配置了127.0.0.1的密码,但这个没意义,这里之所以写,就是图个明白
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456' PASSWORD EXPIRE NEVER;
之前一直navicat一直连不上,后来宿主机装了yum install -y mysql,然后用-h docker容器的内网可以连
后来发现127.0.0.1也可以了,有点蒙,我好像啥都没干,就好了,没安装yum install -y mysql是这不行的
远程用navicat也发现可以连了,无论是用172.17.0.2,还是127.0.0.1,这个是真神奇,为了避免下次再盲目入坑,把整个过程记录下来