首页 文章

Docker - Spring Boot应用程序 - 无法访问localhost上的MySql服务器

提问于
浏览
1

如何将在Docker中运行的Spring Boot(JAR)应用程序连接到计算机上的MySql服务器? [我尝试了不同的帖子,但这没有帮助]

在我的Spring Boot'application.properties'中,我有:

spring.datasource.url = jdbc:mysql://localhost:3306/geosoldatabase

我尝试了很多选择:

$ docker run -p 8080:8080 --name containername imagename

$ docker run --net="host" -p 8080:8080 --name containername imagename

$ docker run -p 8080:8080 --add-host=localhost:192.168.99.100 --name containername imagename

但是,我无法连接到MySql服务器 . Hibernate失败了 . 在我的CAAS提供程序上,这一切都很好用 - 当然还有一个已知的容器名称 .

我的Dockerfile非常简单:

FROM fabric8/java-jboss-openjdk8-jdk
ENV JAVA_APP_JAR myapplication.jar
ENV AB_OFF true
EXPOSE 8080
ADD target/$JAVA_APP_JAR /deployments/

如建议的那样,也可以使用环境变量 . 这是我到目前为止所做的:

  • 在Windows10环境设置屏幕中定义,我定义了以下环境变量:[1] DATABASE_HOST = 127.0.0.1:3306和[2] DATABASE_NAME = mydbname

  • 我按照建议更改了application.properties文件:spring.datasource.url = jdbc:mysql:// $ / $

在我键入“docker push ...”后的Docker快速入门屏幕中,我得到了相同的错误 . 这次原因不同:

引起:java.net.UnknownHostException:$ :名称或服务未知 .

要检查环境变量是否正确设置,我输入:“echo $ ”,我得到值“127.0.0.1:3306” .

Update :建议将'docker-machine ip'地址放入database_host变量中 . 原因现在有点不同:

引起:org.hibernate.tool.schema.spi.SchemaManagementException:无法打开架构管理目标的JDBC连接

2 回答

  • 1

    好吧,正如所承诺的那样 - 我自己就试过了 .

    假设您的localhost mysql实例在默认端口3306上运行,请在spring boot项目的application.properties中包含以下内容:

    spring.datasource.url = jdbc:mysql://${DATABASE_HOST}/${DATABASE_NAME}
    

    然后使用以下环境变量在docker容器中运行spring boot app

    DATABASE_HOST=127.0.0.1:3306
    DATABASE_NAME=yourDBname
    

    如果使用上述配置,请不要在属性中的任何位置添加端口 . 或者,测试将这些直接推送到application.properties中的spring.datasource.url

    祝好运 .

  • 0

    您需要在Spring引导应用程序属性中使用环境变量来代替mysql URL中的“localhost” . 默认情况下将其设置为localhost:

    MYSQL_HOST=localhost
    spring.datasource.url = jdbc:mysql://${MYSQL_HOST}:3306/geosoldatabase
    

    然后,您可以将MYSQL_HOST环境变量作为docker run命令的一部分传递 . 它应该是mysql容器的名称 . 所以给它一个特定的容器名称,如“mysql”

    更好的方法是使用docker compose并在compose文件中指定网络,并以与上面相同的方式传递环境变量 . 希望有所帮助 .

相关问题