如何将在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/
如建议的那样,也可以使用环境变量。这是我到目前为止所做的:
在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连接
答案 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中的答案。