我在 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 应用程序中获取该环境变量。
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 和端口的恒定配置,因此它连接 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 变量。
最佳答案
我的建议是完全丢弃环境变量和属性中的 IP。
--link myMongo:mongodb
Links myMongo container to host 'mongodb'. This manages docker inside your host config.
现在调整你的属性如下:
spring.data.mongodb.host=mongodb
spring.data.mongodb.port=27017
Now there is no need to manage IPs inside the container.
关于java - Docker将db容器与spring boot链接起来并获取环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31734768/