【问题标题】:Running Spring Boot app inside Docker container, unable to connect MySQL在 Docker 容器内运行 Spring Boot 应用程序,无法连接 MySQL
【发布时间】:2015-11-19 01:57:45
【问题描述】:

我正在尝试学习 Docker,并创建了一个运行 MySQL 服务器的容器。它工作正常,当我在本地运行 Spring Boot 应用程序(没有 Docker)时,我可以从我的 Spring Boot 应用程序中使用 MySQL。但是当我尝试在另一个 Docker 容器中运行 Spring Boot 应用程序时,与 MySQL 的连接失败并出现错误:java.net.ConnectException: Connection refused

在我的 Spring Boot application.properties 我有这个配置:

spring.datasource.url: jdbc:mysql://127.0.0.1/mydb
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driverClassName=com.mysql.jdbc.Driver

有什么想法可能是错的吗?

【问题讨论】:

    标签: mysql docker spring-boot


    【解决方案1】:

    当您想从 Spring Boot 容器中使用 MySQL 容器时,一个好主意是 link 像这样:

    docker run ... --name spring-boot --link mysql ...
    

    假设 mysql 是您的 MySQL 容器的名称,您可以在配置中使用以下 JDBC URL:

    spring.datasource.url: jdbc:mysql://mysql/mydb
    

    【讨论】:

    • 如果你没有链接两个容器,我希望数据源 url 是 'jdbc:mysql:///mydb' 假设 Spring boot 容器和MySQL 容器在同一主机上运行。
    【解决方案2】:

    处理这种情况的最佳方法(我使用过的)是在分离模式下运行您的 MySQL 容器。显然,您可以随意命名容器:

    docker run --detach --name = my-MySQL --env = "MYSQL_ROOT_PASSWORD=your_password_here" mysql
    

    您的容器将以分离模式运行,现在您可以使用检查命令检查其运行的 IP 和端口:

    docker inspect docker_mysql
    

    您可以使用以下命令检查日志:-

    docker logs my-MySQL
    

    此外,您还可以使用检查后获得的 IP。我的 MySQL 在 172.17.0.2 和默认端口 3306 上运行:

    spring.datasource.url=jdbc:mysql://172.17.0.2:3306/mydb 
    

    您还可以使用任何客户端连接到 MySQL 服务器。我一般使用mysql-client

    sudo  mysql -uroot -pyour_password_here -h 172.17.0.2 -P 3306
    

    【讨论】:

      猜你喜欢
      • 2021-04-22
      • 2020-10-15
      • 2017-11-03
      • 2021-04-04
      • 1970-01-01
      • 2020-08-10
      • 2021-08-02
      • 1970-01-01
      • 2018-07-11
      相关资源
      最近更新 更多