C# 连接到Docker容器中的mongodb

C# 连接到Docker容器中的mongodb,c#,mongodb,docker,asp.net-core,C#,Mongodb,Docker,Asp.net Core,我正在尝试将web api部署到docker容器。我能够在docker中运行该服务,但任何与数据库调用相关的操作都会失败。我不完全清楚为什么。这是我的密码: Dockerfile\u local FROM mcr.microsoft.com/dotnet/core/sdk:3.1.302-alpine3.12 as builder EXPOSE 27017 COPY . . RUN dotnet publish --configuration Release MembershipApi/Me

我正在尝试将web api部署到docker容器。我能够在docker中运行该服务,但任何与数据库调用相关的操作都会失败。我不完全清楚为什么。这是我的密码:

Dockerfile\u local

FROM mcr.microsoft.com/dotnet/core/sdk:3.1.302-alpine3.12 as builder
EXPOSE 27017

COPY . .

RUN dotnet publish --configuration Release MembershipApi/MembershipApi.csproj -o /app

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1.8-alpine3.12

WORKDIR /app

COPY --from=builder /app .

CMD ["dotnet", "MembershipApi.dll"]
version: "3"
services: 
    test:
        image: mcr.microsoft.com/dotnet/core/sdk:3.1.402-alpine3.12
        depends_on: 
            - membership-api
            - mongo
        entrypoint: ["dotnet","test", "/builds/MembershipApi.IntergrationTests/MembershipApi.IntergrationTests.csproj", "--configuration", "Release"]
        volumes:
            - .:/builds
        
    membership-api:
        build:
            context: .
            dockerfile: Dockerfile_local
        depends_on:
            - mongo
        ports:
            - 9000:80
    mongo:
        image: mongo:4.0.16
        ports:
            - 27017
docker compose local.yml

FROM mcr.microsoft.com/dotnet/core/sdk:3.1.302-alpine3.12 as builder
EXPOSE 27017

COPY . .

RUN dotnet publish --configuration Release MembershipApi/MembershipApi.csproj -o /app

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1.8-alpine3.12

WORKDIR /app

COPY --from=builder /app .

CMD ["dotnet", "MembershipApi.dll"]
version: "3"
services: 
    test:
        image: mcr.microsoft.com/dotnet/core/sdk:3.1.402-alpine3.12
        depends_on: 
            - membership-api
            - mongo
        entrypoint: ["dotnet","test", "/builds/MembershipApi.IntergrationTests/MembershipApi.IntergrationTests.csproj", "--configuration", "Release"]
        volumes:
            - .:/builds
        
    membership-api:
        build:
            context: .
            dockerfile: Dockerfile_local
        depends_on:
            - mongo
        ports:
            - 9000:80
    mongo:
        image: mongo:4.0.16
        ports:
            - 27017
错误

membership-api_1  | warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
membership-api_1  |       Failed to determine the https port for redirect.
membership-api_1  | fail: Microsoft.AspNetCore.Server.Kestrel[13]
membership-api_1  |       Connection id "0HM3LNKLS24AA", Request id "0HM3LNKLS24AA:00000002": An unhandled exception was thrown by the application.
membership-api_1  | System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "Automatic", 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.
membership-api_1  |  ---> System.Net.Sockets.SocketException (99): Address not available
membership-api_1  |    at System.Net.Sockets.Socket.BeginConnectEx(EndPoint remoteEP, Boolean flowContext, AsyncCallback callback, Object state)
membership-api_1  |    at System.Net.Sockets.Socket.ConnectAsync(EndPoint remoteEP)
membership-api_1  |    at MongoDB.Driver.Core.Connections.TcpStreamFactory.ConnectAsync(Socket socket, EndPoint endPoint, CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.Core.Connections.TcpStreamFactory.CreateStreamAsync(EndPoint endPoint, CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancellationToken)
membership-api_1  |    --- End of inner exception stack trace ---
membership-api_1  |    at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.Core.Servers.ServerMonitor.InitializeConnectionAsync(CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.Core.Servers.ServerMonitor.HeartbeatAsync(CancellationToken cancellationToken)", LastHeartbeatTimestamp: "2020-10-21T12:31:43.5254072Z", LastUpdateTimestamp: "2020-10-21T12:31:43.5254077Z" }] }.
membership-api_1  |    at MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException(IServerSelector selector, ClusterDescription description)
membership-api_1  |    at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedHelper.HandleCompletedTask(Task completedTask)
membership-api_1  |    at MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChanged(IServerSelector selector, ClusterDescription description, Task descriptionChangedTask, TimeSpan timeout, CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.Core.Clusters.Cluster.SelectServer(IServerSelector selector, CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.MongoClient.AreSessionsSupportedAfterServerSelection(CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.MongoClient.AreSessionsSupported(CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.MongoClient.StartImplicitSession(CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.OperationExecutor.StartImplicitSession(CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.MongoCollectionImpl`1.UsingImplicitSession[TResult](Func`2 func, CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.MongoCollectionImpl`1.FindSync[TProjection](FilterDefinition`1 filter, FindOptions`2 options, CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.FindFluent`2.ToCursor(CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.IAsyncCursorSourceExtensions.SingleOrDefault[TDocument](IAsyncCursorSource`1 source, CancellationToken cancellationToken)
membership-api_1  |    at MongoDB.Driver.IFindFluentExtensions.SingleOrDefault[TDocument,TProjection](IFindFluent`2 find, CancellationToken cancellationToken)
membership-api_1  |    at MembershipApi.Data.PaymentRepo.GetBalanceById(Int32 id) in /MembershipApi/Data/PaymentRepo.cs:line 23
membership-api_1  |    at MembershipApi.Controllers.PaymentController.GetBalance(Int32 id) in /MembershipApi/Controllers/PaymentController.cs:line 24
membership-api_1  |    at lambda_method(Closure , Object , Object[] )
membership-api_1  |    at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
membership-api_1  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)     
membership-api_1  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
membership-api_1  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
membership-api_1  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
membership-api_1  | --- End of stack trace from previous location where exception was thrown ---
membership-api_1  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
membership-api_1  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
membership-api_1  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
membership-api_1  | --- End of stack trace from previous location where exception was thrown ---
membership-api_1  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)  
membership-api_1  |    at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
membership-api_1  |    at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
membership-api_1  |    at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
membership-api_1  |    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
membership-api|1 | warn:Microsoft.AspNetCore.HttpsPolicy.httpsreditionmiddleware[3]
membership-api|1|无法确定重定向的https端口。
membership-api|1|fail:Microsoft.AspNetCore.Server.Kestrel[13]
membership-api|1|连接id“0HM3LNKLS24AA”,请求id“0HM3LNKLS24AA:00000002”:应用程序引发了未处理的异常。
membership-api|1|System.TimeoutException:使用CompositeServerSelector{Selectors=MongoDB.Driver.MongoClient+会话支持服务器选择器,LatencyMitingServerSelector{AllowedLatencyRange=00:00.0150000}选择服务器30000ms后发生超时。群集状态的客户端视图为{ClusterId:“1”,连接模式:“自动”,类型:“未知”,状态:“断开”,服务器:[{ServerId:{ClusterId:1,端点:
“Unspecified/localhost:27017”},端点:“Unspecified/localhost:27017”,ReasonChanged:“心跳”,状态:“断开连接”,ServerVersion:,TopologyVersion:,类型:“未知”,HeartbeatException:“MongoDB.Driver.MongoConnectionException:打开与服务器的连接时发生异常。
membership-api_1|-->System.Net.Sockets.SocketException(99):地址不可用
membership-api|1位于System.Net.Sockets.Socket.BeginConnectEx(端点remoteEP、布尔流上下文、异步回调、对象状态)
membership-api|1位于System.Net.Sockets.Socket.ConnectAsync(端点remoteEP)
membership-api|1 |位于MongoDB.Driver.Core.Connections.TcpStreamFactory.ConnectAsync(套接字套接字、端点端点、取消令牌取消令牌)
membership-api|1 |位于MongoDB.Driver.Core.Connections.TcpStreamFactory.CreateStreamAsync(端点端点,取消令牌取消令牌)
MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken CancellationToken)上的membership-api|1
membership-api|1|---内部异常堆栈跟踪的结束---
MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelperAsync(CancellationToken CancellationToken)上的membership-api|1
MongoDB.Driver.Core.Servers.ServerMonitor.InitializeConnectionAsync(CancellationToken CancellationToken)上的membership-api|1
membership-api|1|位于MongoDB.Driver.Core.Servers.ServerMonitor.HeartbeatAsync(CancellationToken CancellationToken)”,LastHeartbeatTimestamp:“2020-10-21T12:31:43.5254072Z”,LastUpdateTimestamp:“2020-10-21T12:31:43.5254077Z”}。
MongoDB.Driver.Core.Clusters.Cluster.ThrowTimeoutException上的membership-api|1(IServerSelector选择器,ClusterDescription)
MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChangedHelper.HandleCompletedTask上的membership-api|1(任务完成任务)
MongoDB.Driver.Core.Clusters.Cluster.WaitForDescriptionChanged上的membership-api|1(IServerSelector选择器、ClusterDescription、TaskDescriptionChangedTask、TimeSpan超时、CancellationToken CancellationToken)
MongoDB.Driver.Core.Clusters.Cluster.SelectServer上的membership-api|1(IServerSelector选择器,CancellationToken CancellationToken)
membership-api|1|位于MongoDB.Driver.MongoClient.AreSessionsSupportedfterServerSelection(CancellationToken CancellationToken)
支持MongoDB.Driver.MongoClient.AreSessions上的membership-api|1(取消令牌取消令牌)
MongoDB.Driver.MongoClient.StartImplicitSession上的membership-api|1|(CancellationToken CancellationToken)
MongoDB.Driver.OperationExecutor.StartImplicitSession(CancellationToken CancellationToken)上的membership-api|1
membership-api|1|位于MongoDB.Driver.MongoCollectionImpl`1.UsingImplicitSession[TResult](Func`2 Func,CancellationToken CancellationToken)
membership-api|1|位于MongoDB.Driver.MongoCollectionImpl`1.FindSync[tProject](FilterDefinition`1过滤器,FindOptions`2选项,CancellationToken CancellationToken)
membership-api|1|位于MongoDB.Driver.FindFluent`2.ToCursor(CancellationToken CancellationToken)
membership-api|1 |位于MongoDB.Driver.iasyncursorsourceextensions.SingleOrDefault[TDocument](iasyncursource`1 source,CancellationToken CancellationToken)
membership-api|1|位于MongoDB.Driver.IFindFluentExtensions.SingleOrDefault[TDocument,tProject](IFindFluent`2查找,取消令牌取消令牌)
MembershipApi/Data/PaymentRepo.cs中的MembershipApi.Data.PaymentRepo.GetBalanceById(Int32 id)中的MembershipApi|u 1:第23行
MembershipApi/Controllers/PaymentController.cs中MembershipApi.Controllers.PaymentController.GetBalance(Int32 id)处的membership-api_1 |:第24行
membership-api|1|at lambda|u方法(闭包、对象、对象[])
membership-api|1位于Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(对象目标,对象[]参数)
membership-api|1位于Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper映射器、ObjectMethodExecutor执行器、对象控制器、对象[]参数)
membership-api|1位于Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()上
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next上的membership-api|1|
membership-api|1位于Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()上
membership-api|1 |---从引发异常的前一个位置开始的堆栈结束跟踪---
membership-api|1位于Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExec