【已解决】记录SpringBoot无法连接docker中mysql

问题描述:在docker中创建mysql容器,本地可以远程连接到mysql,但是将项目部署到云服务中,连接不到docker中的mysql

1. 创建mysql容器

1.1拉取镜像

docker pull mysql:latest

1.2 创建容器

docker run -d --name=mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password -d mysql:latest

your_password:你的密码

docker run -d --name mysqlserver -e MYSQL_ROOT_PASSWORD=abc123 -v /home/mysql:/etc/mysql/conf.d -p 3306:3306 mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower_case_table_names=1

1.3 确保mysql启动

docker ps
列出正在运行的所有 Docker 容器。您应该看到包含名称为 mysql-server 的容器,状态为“Up”。

1.4 进入容器

docker exec -it mysql-server /bin/bash

1.5 开启远程连接

通过mysql -u root -p 输入密码进入MySQL内,
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123';
将其中的123456替换为你的密码
刷新生效:FLUSH PRIVILEGES;

2.navicat远程连接

远程连接时使用远程主机ip地址,如:47.92.xxx.xxx
在这里插入图片描述

3.云服务器springboot项目连接

3.1 获取容器ip地址

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-server
直接运行,输出结果为:172.17.0.2
后续通过jdbc连接mysql需要使用容器ip。

3.2 容器网络连接

Docker默认有三个网络:bridge、host和none。其中,bridge是最常用的网络模式之一,因为它可以将多个容器连接在同一个网络中。如果你使用了默认的网络模式,并且没有手动创建新的网络,那么你的MySQL容器应该已经连在了bridge网络上。
如果项目没有部署在容器内(即容器与容器连接),则不需要这一步。但是如果翔作者一样,都配置正确,但是就是无法连接到mysql,可以尝试断开网络,重新连接一下。
docker network disconnect bridge mysql-server
docker network connect bridge mysql-server

3.3 防火墙或安全组问题

防火墙或安全组设置问题:在云服务器上,你需要确保防火墙和安全组的配置允许应用程序访问Docker容器。你可以使用telnet命令检查是否能够连接到MySQL容器的IP地址和端口号。

3.4 最后无可奈何的方法,检查jdbc

 jdbc:mysql://<docker-container-ip>:<mapped-port>/<database-name>?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
  • <docker-container-ip>:Docker容器的IP地址
  • <mapped-port>:Docker容器内部MySQL服务映射到宿主机的端口号
  • <database-name>:MySQL中的数据库名称
  • useUnicode=true&characterEncoding=utf8:指定数据库编码
  • useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai:使用非加密连接,并设置时区
    在这里插入图片描述
    感谢观看!
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐