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

Windows环境Docker中MongoDB无法连接问题及docker rm命令疑问

MongoDB Docker容器连接问题及Docker命令疑问

问题描述

我在Windows机器上运行了MongoDB的Docker实例,容器信息如下:

CONTAINER ID   IMAGE                      COMMAND                  CREATED       STATUS          PORTS                                            NAMES
8fa2abece6fc   mongo:latest               "docker-entrypoint.s…"   2 hours ago   Up 42 seconds   27017/tcp, 0.0.0.0:27017->27107/tcp              mongo-container

创建网络和容器使用的命令:

docker network create --atachable -d overlay springBankNet 

docker run -it -d --name mongo-container -p 27017:27107 --network springBankNet --restart always -v mongodb_data_container:/data/db mongo:latest

可以成功进入容器:

docker exec -it mongo-container bash

但使用Studio 3T或MongoDB Compass连接时失败,报错:

Connection failed.

SERVER [localhost:27017] (Type: UNKNOWN)
|_/ Connection error (MongoSocketReadException): Prematurely reached end of stream

Details:
Timed out after 5000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}]

Spring项目连接时执行mvn clean install也出现相同类型错误:

2022-07-20 19:40:22.636  INFO 5768 --- [           main] org.mongodb.driver.client                : MongoClient with metadata {"driver": {"name": "mongo-java-driver|sync|spring-boot", "version": "4.6.1"}, "os": {"type": "Windows", "name": "Windows 10", "architecture": "amd64", "version": "10.0"}, "platform": "Java/Oracle Corporation/15.0.2+7-27"} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=null, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=null, streamFactoryFactory=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.Jep395RecordCodecProvider@186d8a71]}, clusterSettings={hosts=[localhost:27017], srvServiceName=mongodb, mode=SINGLE, requiredClusterType=UNKNOWN, requiredReplicaSetName='null', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='30000 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, sendBufferSize=0}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, sendBufferSize=0}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=0, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=false, invalidHostNameAllowed=false, context=null}, applicationName='null', compressorList=[], uuidRepresentation=JAVA_LEGACY, serverApi=null, autoEncryptionSettings=null, contextProvider=null}
2022-07-20 19:40:22.718  INFO 5768 --- [localhost:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server localhost:27017

com.mongodb.MongoSocketReadException: Prematurely reached end of stream
        at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:112) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:135) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:713) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:571) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:410) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:337) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:101) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:45) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:131) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnectionInitializer.startHandshake(InternalStreamConnectionInitializer.java:73) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:182) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:193) ~[mongodb-driver-core-4.6.1.jar:na]
        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:157) ~[mongodb-driver-core-4.6.1.jar:na]
        at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

注:未使用用户名或密码,仅尝试普通连接。

解决方案

1. 端口映射错误修正

从容器端口信息可以看到,你把宿主机的27017端口映射到了容器的27107端口,但MongoDB默认监听容器内的27017端口。这是连接失败的核心原因:客户端尝试连接宿主机27017端口,但该端口实际指向容器内未被MongoDB使用的27107端口,导致连接异常。

修正步骤:

  • 停止并删除现有容器:
    docker stop mongo-container
    docker rm mongo-container
    
  • 使用正确的端口映射重新创建容器(宿主机端口:容器端口,容器端必须是27017):
    docker run -it -d --name mongo-container -p 27017:27017 --network springBankNet --restart always -v mongodb_data_container:/data/db mongo:latest
    
  • 重新尝试用Studio 3T、MongoDB Compass或Spring项目连接localhost:27017即可。

2. 其他潜在检查点

  • 确认Windows防火墙未阻止27017端口的入站连接。
  • 检查Spring项目的MongoDB配置,确保连接地址为mongodb://localhost:27017/(对应正确的端口)。

Docker命令疑问:docker rm <name> vs docker container rm <name>

两者功能完全一致,都是用于删除指定的Docker容器。docker rm是docker container rm的简写形式,Docker支持这种简化命令来减少输入量。在实际使用中,两种命令效果没有任何区别,可根据个人习惯选择使用。


内容的提问来源于stack exchange,提问作者Pent Terry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:15:37