com.mongodb.MongoSocketOpenException: 打开套接字时发生异常

huangapple go评论70阅读模式
英文:

com.mongodb.MongoSocketOpenException: Exception opening socket

问题

以下是翻译好的内容:

我尝试在 Ubuntu 服务器上部署应用程序,使用 docker-compose up 命令。但是我遇到了以下错误信息:

com.mongodb.MongoSocketOpenException: 打开套接字时发生异常
    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: 拒绝连接
    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

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
    links:
      - mymongodb
英文:

could you help me .I try to deploy application on ubuntu server.I use docker-compose up.I have this error.

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

Dokerfile

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

答案1

得分: 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}
英文:

In your docker-compose.yml, you are only linking your spring boot application with your mongodb.

In your application.properties, you are using mongodb which is not a valid host.

You need to pass the environment variables for your spring application. For it, you can do something like this in your 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

And in your application.properties,

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

答案2

得分: 0

尝试使用 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
英文:

Try depends_on instead of links,
it worked for me.

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

得分: 0

以下是翻译好的内容:

使用以下的docker-compose.yml和application.properties配置,我这边可以正常工作。

docker-compose.yml

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
英文:

With the below docker-compose.yml and application.properties configuration its working for me.
docker-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

huangapple
  • 本文由 发表于 2020年9月19日 03:26:48
  • 转载请务必保留本文链接:https://go.coder-hub.com/63961721.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定