You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化SpringBoot与MongoDB时遇MongoSocketOpenException及ConnectException

SpringBoot容器化连接MongoDB失败的解决方案

核心问题分析

你的配置存在三处关键错误:

  1. Docker Compose文件版本使用错误(误用了Docker Desktop版本号)
  2. SpringBoot配置的MongoDB用户名/密码与容器初始化的账号不匹配
  3. 网络连接配置未根据SpringBoot运行环境调整

修复步骤

1. 修正Docker Compose配置

将compose文件的版本改为规范的3.8,同时给Mongo容器映射本地端口(方便本地SpringBoot连接):

version: '3.8'

services:
  mongo:
    image: mongo
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: nim
      MONGO_INITDB_ROOT_PASSWORD: 123

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: nim
      ME_CONFIG_MONGODB_ADMINPASSWORD: 123
      ME_CONFIG_MONGODB_URL: mongodb://nim:123@mongo:27017/

2. 统一MongoDB认证信息

Docker初始化的Mongo root账号是nim/123,但SpringBoot配置用了不匹配的nimasha/1234,修改application.properties:

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=nim
spring.data.mongodb.password=123
spring.data.mongodb.database=StudentDBDocker
spring.data.mongodb.port=27017

3. 调整网络连接配置

  • 本地运行SpringBoot:保持spring.data.mongodb.host=localhost,依赖已映射的27017端口连接容器内MongoDB。
  • SpringBoot也容器化部署:将host改为Docker Compose服务名mongo,并把SpringBoot服务加入compose文件(确保同网络):
# 在docker-compose.yml中新增SpringBoot服务
services:
  # ... 保留mongo、mongo-express配置 ...
  spring-boot-app:
    build: .
    restart: always
    ports:
      - "8080:8080"
    depends_on:
      - mongo
    environment:
      SPRING_DATA_MONGODB_HOST: mongo
      SPRING_DATA_MONGODB_USERNAME: nim
      SPRING_DATA_MONGODB_PASSWORD: 123

4. 重启服务生效

执行命令重启容器:

docker-compose down
docker-compose up -d

再启动SpringBoot应用(本地或容器化)。


内容的提问来源于stack exchange,提问作者Nimasha Madhushani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:50:14