Docker把db容器和spring启动连接起来,并获取环境variables

在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应用程序中获取这些环境variables。

 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的常量configuration,所以它连接mongodb容器没有任何问题。

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

但在该application.properties文件我有一种方法来获取该环境variables,顺便说一句,我试图#{systemEnvironment['MONGODB_PORT_5432_TCP_ADDR']}像这样的表示法。 但我的应用程序无法连接到MongoDB容器。 有没有什么好的做法,这种情况下,我也试图实现AbstractMongoConfiguration获取与@Value批注@Valuevariables。

我的build议是放弃环境variables和属性中的IP。

 --link myMongo:mongodb 

将myMongo容器链接到主机'mongodb'。 这在您的主机configurationpipe理docker。

现在调整你的属性如下:

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

现在不需要pipe理容器内的IP。

如果你想知道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