Docker将db容器与spring boot连接起来并获取环境变量

时间:2015-07-30 21:55:40

标签: java spring docker spring-boot

我在docker中有一个springboot应用程序容器和mongodb容器。

docker run -p 27017:27017 -d --name myMongo mongo

所以我首先运行mongodb容器,然后运行springboot容器。

docker run -p 8080:8080 --name mySpringApp --link myMongo:mongodb mySpringApp

之后我想在springboot app中获取环境变量。

MONGODB_PORT=tcp://172.17.0.5:27017
MONGODB_PORT_5432_TCP=tcp://172.17.0.5:27017
MONGODB_PORT_5432_TCP_PROTO=tcp
MONGODB_PORT_5432_TCP_PORT=27017
MONGODB_PORT_5432_TCP_ADDR=172.17.0.5

在application.properties文件中,我通常喜欢ip和port的常量配置,所以它连接mongodb容器没有任何问题。

spring.data.mongodb.host=172.17.0.56
spring.data.mongodb.port=27017

但是在那个application.properties文件中我有办法得到那个环境变量,顺便说一句,我尝试了#{systemEnvironment['MONGODB_PORT_5432_TCP_ADDR']}这样的表示法。但我的应用程序无法连接到mongodb容器。对于这种情况有没有一种好的做法,我也尝试用AbstractMongoConfiguration获取带有@Value注释的systemEnvironment变量。

2 个答案:

答案 0 :(得分:6)

我的建议是根据环境变量和属性丢弃IP。

--link myMongo:mongodb
  

将myMongo容器链接到主机' mongodb'。这可以管理主机配置中的docker。

现在按如下方式调整您的属性:

spring.data.mongodb.host=mongodb
spring.data.mongodb.port=27017
  

现在无需在容器内管理IP。

答案 1 :(得分:0)

如果您想知道运行MongoDB的IP和端口,可以使用 inspect 命令:

docker inspect myMongo

您将获得IP和端口,您可以直接使用它而无需使用--link命令。

spring.data.mongodb.host=172.17.0.2 // for me mongo was running on this IP, check yours 
spring.data.mongodb.port=27017