如何将运行在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/
正如所建议的,也可以使用环境变量。这是我到目前为止所做的:
在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连接
您需要在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文件中指定一个网络,并以与上面相同的方式传入环境变量。希望能有所帮助。
好吧,如约而至-我自己试过了。
假设您的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中
祝你好运.
在您的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/