【发布时间】:2019-01-16 04:03:55
【问题描述】:
如何将在 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 and [2] DATABASE_NAME=mydbname
- 我按照建议更改了 application.properties 文件: spring.datasource.url = jdbc:mysql://${DATABASE_HOST}/${DATABASE_NAME}
在我输入“docker push...”后的 Docker 快速启动屏幕中,我得到了同样的错误。这次原因不同:
引起:java.net.UnknownHostException:${DATABASE_HOST}:名称或 服务未知。
要检查环境变量是否设置正确,我输入:“echo ${DATABASE_HOST}”,得到值“127.0.0.1:3306”。
更新:建议将 'docker-machine ip' 地址放入 database_host 变量中。原因现在有点不同:
原因:org.hibernate.tool.schema.spi.SchemaManagementException: Unable to open JDBC connection for schema management target
【问题讨论】:
-
docker run --net="host"应该是正确的方法,当你使用它运行它时会发生什么?超时? -
@JackGore - 消息是 [1] com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure, [2] 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动没有收到服务器发来的任何数据包 [3] Caused by: java.net.ConnectException: Connection refused (Connection denied)
-
您是否尝试将您的
docker-machine ip输出作为主机?我今天必须意识到,win10的docker工具箱和docker(native)必须配置不同 -
无修复。请参阅下面问题中的标题“更新”。
标签: docker spring-boot