web-dev-qa-db-fra.com

com.mongodb.MongoSocketOpenException: exception ouvrant le socket (MongoDB, Docker)

J'essaie de démarrer mon application (Spring Boot + Spring Cloud + Eureka + MongoDB) en utilisant l'image docker, mais je ne parviens pas à me connecter à MongoDB.

Exception:

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

Je démarre mon application avec la commande execute: docker-compose up --build

Journal Docker:

enter image description here

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"

Pourquoi j'ai une exception pour ouvrir une socket? Comment résoudre ce problème?

5
bsuart

Vous définissez mongodb Host dans le fichier de propriétés comme localhost. Dans une adresse d'hôte local de conteneur elle-même, mais votre mongodb est pas dans ce conteneur (service de voiture) dans lequel le service de voiture s'exécute. Pendant que vous utilisez docker compose, vous pouvez adresse un conteneur avec son nom. Dans votre cas, c'est mongodb.

7
barbakini

pour clarifier la réponse de @ barbakini, pour la définir dans applications.yaml utilisez:

spring.data.mongodb.Host: mongodb
2
user1668635