【问题标题】:Cannot connect to external Mongodb IP through Docker无法通过 Docker 连接到外部 Mongodb IP
【发布时间】:2018-10-17 08:25:50
【问题描述】:

我使用 docker 部署我的 Spring boot Netflix 微服务多项目。

我对 docker run 我的 eureka 和配置项目没有任何问题。

但是,当我将另一个项目传达给 eureka 时,系统会抛出以下错误

 monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketOpenException: Exception opening socket.

我知道,如果 Spring Boot 无法通过设置为配置存储库 application.xml 的 spring.data.mongodb.uri 的 uri 与 Mongodb 通信,则默认情况下会连接到 localhost。

我 100% 确定这个 spring.data.mongodb.uri 指向正确的 url。但是,当我运行 Spring actuator 页面的 /env 时,我看不到 spring.data.mongodb.uri。

如果我部署eureka,config和项目没有docker,系统运行良好。

谁能告诉我为什么 docker 和非 docker 环境中的行为不同?

【问题讨论】:

    标签: java mongodb docker spring-boot spring-cloud-netflix


    【解决方案1】:

    在 docker 容器中运行时(如果您在 docker 容器中运行所有内容),所有容器都连接到一个默认网络。例如,默认网络的子网是 172.16.1.0/28。您可以使用以下方法检查每个容器使用的 IP 地址:

    docker inspect {name-or-id-of-container}
    

    这意味着,默认情况下,localhost 中不提供端口 27017。

    更新: 我创建了一个示例项目,涉及 Eureka Server、Config Server 和 Application 读取 spring.data.mongodb.uri 属性并打印到标准输出。

    https://github.com/bkuzmic/spring-cloud-docker-sample

    【讨论】:

    • 但我将 mongodb 连接到 mongodb 未使用 docker 设置的 url
    • 您的应用程序,如果在 docker 容器中运行,则无法通过 localhost 看到 mongodb。尝试在您的项目配置中将mongodb的ip地址设置为您机器的当前ip地址(eth0或eth1网络设备上的那个)
    • 对于在 docker 中运行的应用程序,localhost 意味着容器本身,而不是您的机器。
    • 您能否提供更多项目设置的详细信息?您是否使用 bootstrap.properties 连接到配置服务器?
    • bootstrap.yml。供您参考,我可以使用非 docker 环境进行连接。我只在 docker 环境中遇到问题。
    猜你喜欢
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2014-04-11
    • 2017-06-01
    • 2017-06-11
    相关资源
    最近更新 更多