当前位置: 首页 > 知识库问答 >
问题:

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

薛弘壮
2023-03-14

如何将运行在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:/${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个答案

韦翰音
2023-03-14

您需要在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文件中指定一个网络,并以与上面相同的方式传入环境变量。希望能有所帮助。

段干楚青
2023-03-14

好吧,如约而至-我自己试过了。

假设您的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中

祝你好运.

呼延哲
2023-03-14

在您的docker运行命令中使用--network=“host”,那么您的docker容器中的127.0.0.1将指向您的docker主机。请参阅本文中的答案。

 类似资料:
  • 2017-05-20 15:23:31+0200:env:{“rack.version”=>[1,3],“rack.errors”=>#>,“rack.multithread”=>true,“rack.multiprocess”=>false,“rack.run_once”=>false,“script_name”=>>“query_string”=>>“http/1.1”,“server_sof

  • 问题内容: 我最近在Windows 2003上安装了MySQL 5,并尝试配置实例。一切正常,直到我进入“应用安全设置”,这时才出现上述错误()。 我的防火墙中确实存在“ MySQL Server”的端口3306异常。 问题答案: 您可能必须向用户授予表上的“ localhost”特权。请参阅语法文档。这是一个示例(来自C语言)。 “在%s上授予所有特权。*由’%s’标识为’%s’@’本地主机’”

  • 以下是启动本地计算机kubernetes集群的指南:http://kubernetes.io/v1.0/docs/gett-started-guides/docker.html 我用。yaml文件创建了各种POD,一切正常,我可以使用容器IPs访问nginx和mysql(172.17.x.x范围内,使用docker0),但是当我创建服务时,服务IPs在10.0.0.x范围内,其他容器无法访问。 k

  • 我还一直得到“自动填充$HTTP_RAW_POST_DATA是deprecated”,并且我已经在.ini中将always_populate_raw_post_data更改为-1,我一直得到这些。

  • 问题内容: 我刚刚使用自制软件在Mac上使用Docker- Toolbox安装了Docker:使用自制软件安装了Docker 在使用Rails创建并配置了容器之后,Postgres并启动了docker-compose,一切看起来都很好,但是我无法从主机访问Web服务器。 输出 当我输入谷歌浏览器的网址http://0.0.0.0:8000/我得到 所以我尝试了 具有以下输出: 当我尝试使用Chro

  • 问题内容: 我在Windows 7上使用 mysql-installer-5.5.20.0.msi 安装了MySQL 。在cmd窗口中,运行“ mysqlshow -u root -p”。它要求输入密码,然后返回此错误:“无法连接到’localhost’上的MySQL服务器(10061)”。这是部分失败/成功安装的错误指示。 阅读页面http://dev.mysql.com/doc/refman/