使用docker部署springboot项目时无法连接mysql数据库

  • Post author:
  • Post category:mysql


我在云服务器上部署项目时,可以通过外网访问springboot项目,也可以远程连接MySQL,但springboot项目就是无法访问mysql数据库,刚开始是没用设置 –net,以为用的都是默认的bridge,便可以进行访问,但并没有访问成功

springboot容器和MySQL容器同时加在默认的bridge上无法通信是因为,他们的bridge不是同一个bridge,可以考虑新建一个network,我新建了一个test-net


springboot容器启动命令:

docker run --name test --net test-net --link=bridge-mysql:mysql -p 9001:9001 -d springboot


MySQL容器启动命令:

docker run -it -d --name mysql --net=test-net \
-m 500m -v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/config:/etc/mysql/conf.d  \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai mysql:8.0.21 \
--lower_case_table_names=1


--link=mysql容器名:mysql别名(用于映射springboot项目的mysql,ip)

可以使用 –network,也可以使用 –link

使用 –link的话,配置那里写mysql就可以了,因为docker会把mysql容器的ip给你加到springboot容器的/etc/hosts,说白了- -link 就是在hosts里加一个别名,让springboot可以找到。通过在yml中配置这个别名,这样他就知道找mysql容器的ip

但使用 –network的话,配置那里不要写mysql,写mysql的容器ip,但容器的ip会经常变,所以

用域名会更好

,比如说把localhost改成test.com,它映射的还是127.0.0.1,这就是域名映射,往/etc/hosts加记录,容器的话,你可以进去容器里面改/etc/hosts

但容器的ip不是会变吗,ip变了,不是相当于test.com映射的是旧ip吗。其实不会的,变了的话,docker会自动更改,不然有何意义

部署项目时还遇到了一个问题,MySQL容器 –net 只有用host才可以远程连接,用其他的network就无法连接,这种情况需要把安全组的限制ip解开就可以了



版权声明:本文为m0_64158248原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。