You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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容器名称见截图。

针对性解决步骤

  1. 修正数据库驱动配置
    日志提示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
    
  2. 确保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
    
  3. 授权MySQL远程连接权限
    MySQL 8.0默认限制远程连接,需进入容器配置权限:

    # 进入MySQL容器终端
    docker exec -it mysqldb mysql -uroot -pxxxx
    # 执行授权命令
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxx';
    FLUSH PRIVILEGES;
    
  4. 验证数据库URL主机名
    若容器不在同一网络,需将URL中的mysqldb替换为宿主机器IP(如172.17.0.1或宿主实际公网/内网IP):

    spring.datasource.url=jdbc:mysql://宿主IP:3306/spring_boot_todo?useSSL=false&serverTimezone=UTC
    
  5. 重新构建并启动容器
    修改配置后重新构建镜像:

    docker build -t springbootmysql .
    

    再按上述网络配置启动容器即可。


内容的提问来源于stack exchange,提问作者masa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:25:17