【问题标题】:com.mongodb.MongoSocketOpenException: Exception opening socket(MongoDB, Docker)com.mongodb.MongoSocketOpenException:异常打开套接字(MongoDB,Docker)
【发布时间】:2018-01-26 08:01:43
【问题描述】:

我尝试使用 docker 映像启动我的应用程序(Spring Boot + Spring Cloud + Eureka + MongoDB),但我无法连接到 MongoDB。

例外:

exception "com.mongodb.MongoSocketOpenException: Exception opening socket."

我使用执行命令启动我的应用程序:docker-compose up --build

Docker 日志:

application.yml:

# Spring properties
spring:
  application:
    name: car-service
  data:
    mongodb.host: localhost
    mongodb.port: 32769
    mongodb.uri: mongodb://localhost/test
    mongo.repositories.enabled: true


# Discovery Server Access
eureka:
    client:
      serviceUrl:
        defaultZone: http://localhost:8761/eureka/

# HTTP Server (Tomcat) Port
server: 
  port: 2220

error:
  whitelabel:
    enabled: false

docker-compose.yml:

eureka:
  build: ./eureka-discovery-service
  ports:
    - "8761:8761"

mongodb:
  image: mongo:3.0.4
  ports:
    - "32769:32769"

postgresql:
  image: postgres:9.6.1
  ports:
    - "32770:32770"

gateway-service:
  build: ./gateway-service
  ports:
    - "9090:9090"
  links:
    - eureka
  environment:
    SPRING_APPLICATION_NAME: gateway-service
    SPRING_PROFILES_ACTIVE: enableEureka
    EUREKA_INSTANCE_PREFER_IP_ADDRESS: "true"
    EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka:8761/eureka/

airplane-service:
  build: ./airplane-service
  ports:
    - "2222:2222"
  links:
    - eureka
    - postgresql
  environment:
    SPRING_APPLICATION_NAME: airplane-service
    SPRING_PROFILES_ACTIVE: enableEureka
    EUREKA_INSTANCE_PREFER_IP_ADDRESS: "true"
    EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka:8761/eureka/
    SPRING_SLEUTH_ENABLED: "true"
    SPRING_DATASOURCE_POSTGRESQL_URL: jdbc:postgresql://localhost:32770/postgres

car-service:
  build: ./car-service
  ports:
    - "2220:2220"
  links:
    - eureka
    - mongodb
  environment:
    SPRING_APPLICATION_NAME: car-service
    SPRING_PROFILES_ACTIVE: enableEureka
    EUREKA_INSTANCE_PREFER_IP_ADDRESS: "true"
    EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka:8761/eureka/
    SPRING_SLEUTH_ENABLED: "true"
    SPRING_DATA_MONGODB_URI: mongodb://localhost:32769/test


machine-service:
  build: ./machine-service
  ports:
    - "2224:2224"
  links:
    - eureka
  environment:
    SPRING_APPLICATION_NAME: machine-service
    SPRING_PROFILES_ACTIVE: enableEureka
    EUREKA_INSTANCE_PREFER_IP_ADDRESS: "true"
    EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka:8761/eureka/
    SPRING_SLEUTH_ENABLED: "true"

为什么我打开套接字时出现异常?如何解决这个问题?

【问题讨论】:

    标签: java mongodb spring-boot docker-compose netflix-eureka


    【解决方案1】:

    您将属性文件中的 mongodb 主机设置为 localhost。在容器 localhost 地址本身中,但您的 mongodb 不在在 car-service 运行的容器(car-service)中。当您使用 docker compose 时,您可以用它的名字寻址一个容器。在您的情况下,它是 mongodb

    【讨论】:

      【解决方案2】:

      澄清@barbakini 的答案,在applications.yaml 使用中定义它:

      spring.data.mongodb.host: mongodb
      

      【讨论】:

      • 这个答案与之前的答案有何不同?
      • 它是显式的,而不是隐式的:)
      【解决方案3】:

      您的 mongoDB 服务未启动,

      通过以下命令检查状态

      sudo service mongodb status
      
      sudo service mongodb start
      

      希望它能起作用,也可能有几个原因, 就像您在应用程序中为 mongodb 服务定义的配置不正确,例如端口。

      【讨论】:

      • 可能是 Mongo 尚未安装。
      • mongodb:无法识别的服务
      【解决方案4】:

      尝试添加
      network_mode: host
      并删除
      links: ....
      对于所有想要在 docker-compose.yml 中连接 mongo、eureka 或 postgresql 的服务。
      通过这样做,您将连接到 docker localhost。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 2019-08-02
        • 2021-01-02
        • 2019-10-03
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多