web-dev-qa-db-ja.com

com.mongodb.MongoSocketOpenException:ソケットを開く際の例外(MongoDB、Docker)

Dockerイメージを使用してアプリケーション(Spring Boot + Spring Cloud + Eureka + MongoDB)を起動しようとしましたが、MongoDBに接続できません。

例外:

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

アプリケーションを実行コマンドで起動します:docker-compose up --build

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"

ソケットを開くときに例外が発生するのはなぜですか?この問題を解決する方法は?

5
bsuart

プロパティファイルでmongodb Hostをlocalhostとして設定しています。コンテナーのローカルホストアドレスitselfですが、mongodbはnotであり、そのコンテナー(car-service)で、car-serviceが実行されます。dockercomposeを使用している間、次のことができます。その名前でコンテナをアドレス指定します。あなたの場合、それはmongodbです。

7
barbakini

@barbakiniの答えを明確にし、applications.yamlで定義するには:

spring.data.mongodb.Host: mongodb
2
user1668635