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

标签 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 应用程序中获取该环境变量。

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/

相关文章:

spring - 如何使用上下文将参数传递给 Thymeleaf 模板?

java - 如何创建生成随机数数组列表的方法

java - 在 Servlet/JSP 中加载属性文件

java - 如何从 Java 应用程序中的 Main 方法运行线程?

java - java中如何将字节转换为kb

node.js - 将 Nodejs 应用程序容器安全地链接到 Elasticsearch 容器 (Docker)

java - 实现连接池 : Java

java - 处理命令行参数和 Spring

docker 检查结果为错误 : No such object even if image exists

Docker 忽略 `--platform` 中的 `Dockerfile` 标志