【问题标题】:Spring boot mongodb connection time out errorspring boot mongodb连接超时错误
【发布时间】:2020-11-27 15:31:58
【问题描述】:

我正在学习 mongodb,基本上我有一个简单的 spring boot 应用程序,它连接到 mongo db 以保存信息。

我的应用属性如下:

spring.data.mongodb.port=27017
spring.data.mongodb.database=emailDb
spring.data.mongodb.username=admin-user123
spring.data.mongodb.password=admin-password123
spring.data.mongodb.authentication-database=admin

所以我创建了一个 docker-compose 文件来将数据库与我的 Spring Boot 应用程序链接起来:

version: '3.2'

volumes:
  mongodb_data:     #creates mount point on docker for mongodb
    driver: local

# config postgres, Keycloak & Mongodb
services:
  servicel-component:
    image: servicel-component
    networks:
      test:
        aliases:
          - email
    environment:
      SPRING_PROFILES_ACTIVE: message
      SPRING_RABBITMQ_HOST: rabbitmq
    ports:
      - 8080:8080       # port for postgres
    depends_on:
      - rabbitmq

  rabbitmq:
    image: rabbitmq:3-management
    environment:
      RABBITMQ_DEFAULT_USER: guest
      RABBITMQ_DEFAULT_PASS: guest
    ports:
      - "5672:5672"
      - "15672:15672"
    networks:
      test:
        aliases:
          - rabbitmq
  mongodb:
    image: mongo:latest
    networks:
      test:
        aliases:
          - mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin-user123
      MONGO_INITDB_ROOT_PASSWORD: admin-password123
    restart: always
    ports:
      - 27017:27017
    volumes:
      - mongodb_data:/data/db
networks:
  test:
    external: true

当你执行 docker-compose up 时会触发以下异常:

2020-08-07 09:35:23.063 INFO 1 --- [ main] org.mongodb.driver.cluster : Adding discovered server localhost:27017 to client view of cluster

2020-08-07 09:35:23.143 INFO 1 --- [localhost:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017


com.mongodb.MongoSocketOpenException: Exception opening socket

at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-3.11.2.jar!/:na]

at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128) ~[mongodb-driver-core-3.11.2.jar!/:na]

at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.11.2.jar!/:na]

at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

Caused by: java.net.ConnectException: Connection refused

at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]

at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:589) ~[na:na]

at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[na:na]

at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]

at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333) ~[na:na]

at java.base/java.net.Socket.connect(Socket.java:648) ~[na:na]

at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongodb-driver-core-3.11.2.jar!/:na]

at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-3.11.2.jar!/:na]

at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-3.11.2.jar!/:na]

... 3 common frames omitted

当我不在 docker 上运行 servicel-component 时,只需将其作为 mvn spring-boot:run 运行并在 docker 上运行 mongodb 即可。 知道我在这里缺少什么吗?

【问题讨论】:

  • 在 docker 之外,您还没有在该端口上运行 mongo 吗?
  • 感谢回复,我只有一个运行在 docker 上的 mongo

标签: spring mongodb spring-boot


【解决方案1】:

你不能使用 localhost,这是指容器本身。如果容器在同一个网络中(不是您的情况),您需要使用主机 IP 或使用 docker DNS。

2020-08-07 09:35:23.143 INFO 1 --- [localhost:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017

【讨论】:

  • 谢谢,但是如何获取 mongo docker 容器的主机 IP?
  • 如果在同一个网络,可以使用容器名:mongodb:27017
  • 另一种方法是将环境变量中的主机 IP 传递给容器。 nickjanetakis.com/blog/…
  • 感谢我在 mongo 的 docker-compose 文件中添加了一个容器名称,并在应用程序属性 spring.data.mongodb.host 中定义它,它可以工作
猜你喜欢
  • 2017-08-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 2016-05-12
  • 2020-10-02
  • 2019-11-01
  • 2020-10-21
相关资源
最近更新 更多