【问题标题】:com.mongodb.MongoSocketOpenException: Exception opening socketcom.mongodb.MongoSocketOpenException:异常打开套接字
【发布时间】:2020-09-18 19:26:48
【问题描述】:

你能帮我吗?我尝试在 ubuntu 服务器上部署应用程序。我使用 docker-compose up。我有这个错误。

com.mongodb.MongoSocketOpenException: Exception opening socket
spring-mongo    |       at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo    |       at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:127) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo    |       at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo    |       at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212]
spring-mongo    | Caused by: java.net.ConnectException: Connection refused (Connection refused)
spring-mongo    |       at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_212]
spring-mongo    |       at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_212]
spring-mongo    |       at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_212]
spring-mongo    |       at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_212]
spring-mongo    |       at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_212]
spring-mongo    |       at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_212]
spring-mongo    |       at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:63) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo    |       at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo    |       at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.0.5.jar!/:na]
spring-mongo    |       ... 3 common frames omitted

Dockerfile

FROM openjdk:8-jdk-alpine
ADD target/spring-mongo.jar spring-mongo.jar
ENTRYPOINT ["java","-jar","spring-mongo.jar"]

application.properties

spring.data.mongodb.host=mymongodb
spring.data.mongodb.port=27017
spring.data.mongodb.database=mongo
spring.data.mongodb.repositories.enabled=true

docer-compose.yml

version: "3"
services:
  mymongodb:
    image: mongo:latest
    container_name: "mymongodb"
    ports:
      - 27017:27017
  spring-mongo:
    image: spring-mongo:1.0
    container_name: spring-mongo
    ports:
      - 8080:8080
    links:
      - mymongodb

【问题讨论】:

  • 当你得到那个错误的时候,MongoDB真的启动了吗?如果您等待,您是否会在该异常之后从数据库中获得更多启动消息?或者,如果你运行 docker-compose up -d,得到异常,等待 30-60 秒,然后再次尝试相同的命令,它会启动吗?

标签: java mongodb docker ubuntu docker-compose


【解决方案1】:

在您的 docker-compose.yml 中,您只是将 Spring Boot 应用程序与您的 mongodb 链接起来。

在您的 application.properties 中,您使用的 mongodb 不是有效的主机。

您需要为您的 spring 应用程序传递环境变量。为此,您可以在 docker-compose.yml 中执行类似的操作。

version: "3"
services:
  mymongodb:
    image: mongo:latest
    container_name: "mymongodb"
    ports:
      - 27017:27017
  spring-mongo:
    image: spring-mongo:1.0
    container_name: spring-mongo
    ports:
      - 8080:8080
    environment:
      - MONGO_HOST=mymongodb
    links:
      - mymongodb

在你的application.properties中,

spring.data.mongodb.host=${MONGO_HOST}

【讨论】:

    【解决方案2】:

    尝试 depends_on 而不是 links, 它对我有用。

    version: "3"
    services:
      mymongodb:
        image: mongo:latest
        container_name: "mymongodb"
        network_mode: host
        restart: always
        ports:
         - 27017:27017
      spring-mongo:
        image: spring-mongo:1.0
        container_name: spring-mongo
        network_mode: host
        restart: always
        ports:
         - 8080:8080
        depends_on:
         - mymongodb
    

    【讨论】:

      【解决方案3】:

      使用下面的 docker-compose.yml 和 application.properties 配置它对我有用。 码头工人-compose.yml docker-compose.yml

      # Use root/example as user/password credentials
      version: '3.1'
      
      services:
      
        mongo:
          image: mongo:4.4.5
          restart: always
          ports:
            - 27017:27017
          environment:
            MONGO_INITDB_ROOT_USERNAME: root
            MONGO_INITDB_ROOT_PASSWORD: example
      
        mongo-express:
          image: mongo-express
          restart: always
          ports:
            - 8081:8081
          environment:
            ME_CONFIG_MONGODB_ADMINUSERNAME: root
            ME_CONFIG_MONGODB_ADMINPASSWORD: example
            ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
      

      application.properties

      spring.data.mongodb.authentication-database=admin
      spring.data.mongodb.username=root
      spring.data.mongodb.password=example
      spring.data.mongodb.database=springAppDB
      spring.data.mongodb.port=27017
      spring.data.mongodb.host=localhost
      

      【讨论】:

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