Docker环境下ASP.NET连接MongoDB遇System.TimeoutException求助
Docker微服务连接MongoDB超时问题求助
遇到的连接超时异常:
System.TimeoutException: 'A timeout occurred after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 }, OperationsCountServerSelector }. Client view of cluster state is { ClusterId : "1", Type : "Unknown", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/localhost:27017" }", EndPoint: "Unspecified/localhost:27017", ReasonChanged: "Heartbeat", State: "Disconnected", ServerVersion: , TopologyVersion: , Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (99): Cannot assign requested address [::1]:27017 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) at MongoDB.Driver.Core.Connections.TcpStreamFactory.Connect(Socket socket, EndPoint endPoint, CancellationToken cancellationToken) at MongoDB.Driver.Core.Connections.TcpStreamFactory.CreateStream(EndPoint endPoint, CancellationToken cancellationToken) at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelper(CancellationToken cancellationToken) --- End of inner exception stack trace --- at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelper(CancellationToken cancellationToken) at MongoDB.Driver.Core.Connections.BinaryConnection.Open(CancellationToken cancellationToken) at MongoDB.Driver.Core.Servers.ServerMonitor.InitializeConnection(CancellationToken cancellationToken) at MongoDB.Driver.Core.Servers.ServerMonitor.Heartbeat(CancellationToken cancellationToken)", LastHeartbeatTimestamp: "2022-10-07T14:01:55.8910217Z", LastUpdateTimestamp: "2022-10-07T14:01:55.8910224Z" }] }.'
相关配置文件
docker-compose.yml
version: '3.4' services: catalogdb: image: mongo catalog.api: image: ${DOCKER_REGISTRY-}catalogapi build: context: . dockerfile: Services\Catalog\Catalog.API\Dockerfile volumes: mongo_data:
docker-compose.override.yml
version: '3.4' services: catalogdb: container_name: catalogdb restart: always ports: - "27017:27017" volumes: - mongo_data:/data/db catalog.api: container_name: catalog.api environment: - ASPNETCORE_ENVIRONMENT=Development - "DatabaseSettings:ConnectionString=mongodb://catalogdb:27017" depends_on: - catalogdb ports: - "8000:80"
appsettings.json
{ "DatabaseSettings": { "ConnectionString": "mongodb://localhost:27017", "DatabaseName": "ProductDb", "CollectionName": "Products" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
已尝试的解决方法(均无效)
- 为防火墙添加例外规则
- 关闭杀毒软件
- 确认容器运行在同一网络
- 为catalogdb配置添加
command: ["mongod", "--port", "27017"]参数 - 将appsettings中的localhost替换为catalogdb,仍出现相同错误
内容的提问来源于stack exchange,提问作者ProgBlogger
相关产品推荐
相关产品推荐

