【问题标题】:Docker linking db container with spring boot and get environment variablesDocker将db容器与spring boot链接并获取环境变量
【发布时间】:2015-10-22 11:02:05
【问题描述】:

我在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 和 port 的常量配置,所以它连接 mongodb 容器没有任何问题。

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

但是在那个 application.properties 文件中,我有一种方法可以获取该环境变量,顺便说一句,我尝试了#{systemEnvironment['MONGODB_PORT_5432_TCP_ADDR']},就像这个符号一样。但我的应用无法连接到 mongodb 容器。对于这种情况有什么好的做法吗,我也尝试使用@Value 注释来实现AbstractMongoConfiguration get systemEnvironment variables。

【问题讨论】:

    标签: java spring docker spring-boot


    【解决方案1】:

    我的建议是完全丢弃环境变量和属性中的 IP。

    --link myMongo:mongodb
    

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

    现在调整你的属性如下:

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

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

    【讨论】:

    • 感谢您的建议,它适用于此解决方案,但有没有办法根据我的方法解决我的问题?
    • 我已经阅读了这个docs.spring.io/spring-boot/docs/current/reference/html/…,我不得不说它对环境变量有点粗略。您可以随时返回调用 System.getenv()。 Spring 方式通常使用 EL 表达式,如 ${MONGODB_PORT}。您可以在属性文件和 Spring Boot 外部 YAML 文件中尝试此操作。如果您使用专用的 Spring 属性加载器,那么这些表达式将在运行时被解释。
    • 感谢您的反馈,顺便说一句,我需要澄清一下; docker将mongodb(如域)解析为主机,但它准确地指向了哪个ip?
    • Docker 操作容器的主机配置并添加分配的 ip 地址。 MongoDB 在容器内解析。 Docker 使用 Docker Ip 地址并通过其安装的网络适配器管理网络。键入 docker 检查容器 | grep IPAddress 以查看 IP。目前,如果 ip 发生变化,那么链接的容器也必须重新启动,因为 mongodb 将指向旧的 ip 地址。
    • 感谢您的评论。但是,当我在本地运行它时,我希望我的代码在 IntelliJ 中仍然可以正常工作。有什么办法可以做到吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 2016-03-07
      • 2018-03-24
      • 1970-01-01
      • 2017-01-30
      • 2021-01-14
      • 2017-07-16
      相关资源
      最近更新 更多