如何将在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 回答
好吧,正如所承诺的那样 - 我自己就试过了 .
假设您的localhost mysql实例在默认端口3306上运行,请在spring boot项目的application.properties中包含以下内容:
然后使用以下环境变量在docker容器中运行spring boot app
如果使用上述配置,请不要在属性中的任何位置添加端口 . 或者,测试将这些直接推送到application.properties中的spring.datasource.url
祝好运 .
您需要在Spring引导应用程序属性中使用环境变量来代替mysql URL中的“localhost” . 默认情况下将其设置为localhost:
然后,您可以将MYSQL_HOST环境变量作为docker run命令的一部分传递 . 它应该是mysql容器的名称 . 所以给它一个特定的容器名称,如“mysql”
更好的方法是使用docker compose并在compose文件中指定网络,并以与上面相同的方式传递环境变量 . 希望有所帮助 .