Mininet交换机无法连控制器及SpringBoot-Docker无法连MySQL求助
技术问题求助及解决方案
问题1:Mininet环境中交换机无法连接控制器
排查与解决步骤
- 确认控制器已正常启动,且监听端口(默认OpenFlow端口为6633/6653)处于开放状态
- 启动Mininet时显式指定控制器地址,执行命令:
mn --controller=remote,ip=控制器IP地址,port=监听端口 - 检查防火墙规则,确保Mininet主机与控制器之间的端口通信未被拦截
- 通过
ping命令验证控制器与Mininet主机的网络可达性 - 查看Mininet控制台日志和控制器日志,定位具体连接失败的错误信息
问题2:Docker部署的SpringBoot应用无法连接MySQL(未使用Docker Compose)
执行docker build -t springbootmysql .构建镜像后,启动应用出现连接失败错误,错误日志如下:
2023-01-06 00:42:24 2023-01-05 16:42:24.864 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2023-01-06 00:42:24 2023-01-05 16:42:24.867 WARN 1 --- [ main] com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation. 2023-01-06 00:42:25 2023-01-05 16:42:25.935 ERROR 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. 2023-01-06 00:42:25 2023-01-06 00:42:25 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure 2023-01-06 00:42:25 2023-01-06 00:42:25 The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 2023-01-06 00:42:25 at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] 2023-01-06 00:42:24 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 2023-01-06 00:42:25 at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] 2023-01-06 00:42:25 at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] 2023-01-06 00:42:25 at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] 2023-01-06 00:42:25 at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] 2023-01-06 00:42:25 at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[mysql-connector-j-8.0.31.jar!/:8.0.31] 2023-01-06 00:42:25 at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar!/:na] 2023-01-06 00:42:25 at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar!/:na] 202
当前application.properties配置:
spring.datasource.url=jdbc:mysql://mysqldb:3306/spring_boot_todo spring.datasource.username=root spring.datasource.password=xxxx spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.jpa.hibernate.ddl-auto=create
MySQL已存在目标数据库,数据库列表:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | spring_boot_todo | | sys | +--------------------+
Docker容器名称见截图。
针对性解决步骤
修正数据库驱动配置
日志提示com.mysql.jdbc.Driver已过时,替换为新版驱动并优化配置:spring.datasource.url=jdbc:mysql://mysqldb:3306/spring_boot_todo?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=xxxx # 新版驱动可通过SPI自动注册,无需手动指定driverClassName # spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.ddl-auto=create确保Docker容器处于同一网络
若SpringBoot与MySQL容器不在同一网络,需创建并加入自定义网络:# 创建应用专属网络 docker network create app-network # 重启MySQL容器并加入网络(替换为实际MySQL容器名) docker stop mysqldb docker run -d --name mysqldb --network app-network -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xxxx mysql:latest # 启动SpringBoot容器时加入同一网络 docker run -d --name springbootmysql --network app-network -p 8080:8080 springbootmysql授权MySQL远程连接权限
MySQL 8.0默认限制远程连接,需进入容器配置权限:# 进入MySQL容器终端 docker exec -it mysqldb mysql -uroot -pxxxx # 执行授权命令 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxx'; FLUSH PRIVILEGES;验证数据库URL主机名
若容器不在同一网络,需将URL中的mysqldb替换为宿主机器IP(如172.17.0.1或宿主实际公网/内网IP):spring.datasource.url=jdbc:mysql://宿主IP:3306/spring_boot_todo?useSSL=false&serverTimezone=UTC重新构建并启动容器
修改配置后重新构建镜像:docker build -t springbootmysql .再按上述网络配置启动容器即可。
内容的提问来源于stack exchange,提问作者masa
相关产品推荐
相关产品推荐

