Docker-Spring Boot应用程序-无法访问本地主机上的MySql服务器

时间:2018-08-08 19:29:59

标签: docker spring-boot

如何将在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服务器。休眠失败。在我的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:// $ {DATABASE_HOST} / $ {DATABASE_NAME}

在Docker Quickstart屏幕中,键入“ docker push ...”后,出现相同的错误。这次的原因有所不同:

  

原因:java.net.UnknownHostException:$ {DATABASE_HOST}:名称或   服务未知。

要检查是否正确设置了环境变量,请键入:“ echo $ {DATABASE_HOST}”,然后得到值“ 127.0.0.1:3306”。

更新:建议将“ docker-machine ip”地址放入database_host变量中。原因现在有所不同:

原因:org.hibernate.tool.schema.spi.SchemaManagementException:无法为架构管理目标打开JDBC连接

3 个答案:

答案 0 :(得分:1)

好的,正如我所承诺的-我只是自己尝试了一次。

假设您的localhost mysql实例在默认端口3306上运行,请在您的Spring Boot项目的application.properties中进行以下设置:

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

,然后使用以下环境变量在docker容器中运行spring boot应用程序

DATABASE_HOST=127.0.0.1:3306
DATABASE_NAME=yourDBname

如果使用上述配置,请勿在属性的任何位置添加端口。或者,为了进行测试,请将它们直接放入application.properties中的spring.datasource.url

祝你好运。

答案 1 :(得分:0)

您需要在Spring Boot应用程序属性中具有一个环境变量,以代替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文件中指定一个网络,并以与上述相同的方式传递环境变量。希望能有所帮助。

答案 2 :(得分:0)

在docker run命令中使用--network =“ host”,然后docker容器中的127.0.0.1将指向您的docker主机。请参阅this post中的答案。