异常打开套接字 - MongoDB,Docker

Posted

技术标签:

【中文标题】异常打开套接字 - MongoDB,Docker【英文标题】:Exception opening socket - MongoDB, Docker 【发布时间】:2021-11-18 08:18:19 【问题描述】:

我有使用 docker 镜像的 Maven 多模块应用程序(Spring Boot + mysql + MongoDB),但我无法连接到 MongoDB。

当本地 mongo 实例“Windows 服务上的 MongoDB 服务器”打开并使用 spring.data.mongodb.host=localhost 时一切正常。

但是当我关闭 mongo 实例并尝试使用: spring.data.mongodb.host=$(MONGO_HOST) 与 docker 一起使用我收到错误 "Exception opening socket"

我使用执行命令启动我的应用程序: mvn install 并尝试使用 docker-compose up --build

控制台

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.1)

2021-09-25 12:19:22.635  INFO 8588 --- [           main] c.o.o.n.controller.NoteControllerTest    : Starting NoteControllerTest using Java 16.0.1 on AntonioPC with PID 8588 (started by ajago in D:\Programming\Eclipse-workspace\OC_Project10\Notes)
2021-09-25 12:19:22.642  INFO 8588 --- [           main] c.o.o.n.controller.NoteControllerTest    : No active profile set, falling back to default profiles: default
2021-09-25 12:19:23.776  INFO 8588 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2021-09-25 12:19:23.777  INFO 8588 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-09-25 12:19:23.824  INFO 8588 --- [           main] .RepositoryConfigurationExtensionSupport : Spring Data JPA - Could not safely identify store assignment for repository candidate interface com.openclas-s-rooms.ocproject10.notes.repository.NoteRepository. If you want this repository to be a JPA repository, consider annotating your entities with one of these annotations: javax.persistence.Entity, javax.persistence.MappedSuperclass (preferred), or consider extending one of the following types with your repository: org.springframework.data.jpa.repository.JpaRepository.
2021-09-25 12:19:23.826  INFO 8588 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 36 ms. Found 0 JPA repository interfaces.
2021-09-25 12:19:24.093  INFO 8588 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2021-09-25 12:19:24.094  INFO 8588 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.
2021-09-25 12:19:24.126  INFO 8588 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 31 ms. Found 1 MongoDB repository interfaces.
2021-09-25 12:19:24.876  INFO 8588 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2021-09-25 12:19:25.458  INFO 8588 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2021-09-25 12:19:25.596  INFO 8588 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-09-25 12:19:25.685  INFO 8588 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.32.Final
2021-09-25 12:19:25.882  INFO 8588 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations 5.1.2.Final
2021-09-25 12:19:26.112  INFO 8588 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2021-09-25 12:19:27.051  INFO 8588 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2021-09-25 12:19:27.065  INFO 8588 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2021-09-25 12:19:27.486  INFO 8588 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'
2021-09-25 12:19:27.586  INFO 8588 --- [localhost:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server localhost:27017

com.mongodb.MongoSocketOpenException: Exception opening socket
        at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.2.3.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:143) ~[mongodb-driver-core-4.2.3.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188) ~[mongodb-driver-core-4.2.3.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.2.3.jar:na]
        at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]
Caused by: java.net.ConnectException: Connection refused: no further information
        at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
        at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:669) ~[na:na]
        at java.base/sun.nio.ch.NiosocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[na:na]
        at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333) ~[na:na]
        at java.base/java.net.Socket.connect(Socket.java:645) ~[na:na]
        at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:107) ~[mongodb-driver-core-4.2.3.jar:na]
        at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.2.3.jar:na]
        at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.2.3.jar:na]
        ... 4 common frames omitted

2021-09-25 12:19:28.302  WARN 8588 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2021-09-25 12:19:28.988  INFO 8588 --- [           main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
2021-09-25 12:19:28.988  INFO 8588 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
2021-09-25 12:19:28.990  INFO 8588 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 2 ms
2021-09-25 12:19:29.018  INFO 8588 --- [           main] c.o.o.n.controller.NoteControllerTest    : Started NoteControllerTest in 7.33 seconds (JVM running for 9.77)
2021-09-25 12:19:29.380  INFO 8588 --- [           main] org.mongodb.driver.cluster               : Cluster description not yet available. Waiting for 30000 ms before timing out

docker-compose.yml

version: '2'

services:
  reports:
    image: 'reports:latest'
    build:
      context: ./reports
    container_name: reports
    ports:
      - 8080:8080
    environment:
      - PATIENTS_URL=http://gps:8081
      - NOTES_URL=http://rewards:8082
      
  patients:
    image: 'patients:latest'
    build:
      context: ./patients
    container_name: patients
    ports:
      - 8081:8081
    environment:
      - MYSQL_HOST=db-mysql
    depends_on:
      - db-mysql

  notes:
    image: 'notes:latest'
    build:
      context: ./notes
    container_name: notes
    ports:
      - 8082:8082
    environment:
      - MONGO_HOST=mongodb
    depends_on:
      - mongodb
      
  db-mysql:
    image: mysql:latest
    container_name: mysql
    ports:
        - 3306:3306
    command: --innodb --init-file /data/application/init.sql
    volumes:
        - ./init.sql:/data/application/init.sql
    environment:
        MYSQL_DATABASE: project_10
        MYSQL_ROOT_USER: root
        MYSQL_ROOT_PASSWORD: Musapa1990..        
     
  mongodb:
    image: mongo:latest
    container_name: mongodb
    network_mode: host
    restart: always
    ports:
        - 27017:27017
    environment:
        MONGO_INITDB_DATABASE: project_10

application.properties

# App config
logging.level.org.springframework=INFO
spring.application.name=P10_notes
server.port=8082

################### MongoDB Configuration ##########################
spring.data.mongodb.database=project_10
spring.data.mongodb.port=27017
#spring.data.mongodb.host=localhost
spring.data.mongodb.host=$(MONGO_HOST)
spring.data.mongodb.authentication-database=admin

# thymeleaf configurations for Auto reload Thymeleaf templates without restart
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=file:src/main/resources/templates/

我在这里阅读了类似的文章并尝试了不同的方法,但没有任何帮助。

【问题讨论】:

尝试将这一行中的圆括号替换为大括号spring.data.mongodb.host=$(MONGO_HOST) 不幸的是 $MONGO_HOST 也没有帮助 您可以尝试对主机值进行硬编码吗?把mongodb放到属性文件中 Connection refused 表示目标上的操作系统主动拒绝连接,因为该端口上没有任何东西在监听。 【参考方案1】:

最后我在安装 mongodb 时搞砸了。当我重新安装 mongo 时,它起作用了。我没有对代码进行任何重要的更改。 只有我添加的是:

################### MongoDB Configuration ##########################
spring.data.mongodb.database=project_10
spring.data.mongodb.port=27017
#spring.data.mongodb.host=localhost
spring.data.mongodb.host=$MONGO_HOST
spring.data.mongodb.authentication-database=admin

我在 application.properties 的所有 3 个模块上添加了它,因为每个模块都使用 MongoDB。

【讨论】:

以上是关于异常打开套接字 - MongoDB,Docker的主要内容,如果未能解决你的问题,请参考以下文章

尝试将docker容器连接到mongodb时出现异常打开套接字异常

Docker:有啥方法可以列出正在运行的 docker 容器中打开的套接字?

Springboot mongo异常与Docker

异常打开套接字 kmongo 和 ktor

NetCore 3.1 项目搭建反射依赖注入,Swagger结合Jwt,sqlSugar+EfCore异常中间件+Log4Net+MongoDb,Redis+Docker,丰富的公共类库,代码示例 下

了解 MongoDB 超时设置