背景:
Springboot工程打成了docker镜像,打出的镜像在测试环境测试通过可以正常使用;
然后修改springboot的配置文件后,布署到准生产环境,启动springboot工程的docker镜像,一直提示can't create connection;
问题追踪:
(1) 怀疑是因为docker镜像无法访问宿主机上的mysql,将ip换成宿主机Ip,尝试后不行;
(2) 换成127.0.0.1后不行,这个地址更不靠谱,访问的是docker容器的地址;
(3) 然后查了一下docker在宿主机上对应的虚拟网卡docker0的地址,换成这个地址后仍然不行;
(4)然后怀疑是mysql权限设置的问题,执行GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678' WITH GRANT OPTION; flush privilages;仍然不行;
(5)最后实在没有办法了,去查看了mysql的报错日志,有报错提示:bad handshake,这句话让我眼前一亮,说明访问到了mysql的端口;赶快查看对应的Springboot配置文件的mysql连接字符串,发现useSSL=false被写成了USEssl=false,将该参数改正确后,再启动docker镜像,成功连接上mysql; 长舒一口气。
后记:
因为mysql5.7之后,mysql默认开启了ssl的连接方式,因此如果没有证书的情况下,需要使用非ssl的连接方式。可以通过show variables like '%ssl%'查看mysql是否开启了ssl连接方式。