使用docker-compose使用dotnet核心的MongoDB连接超时

时间:2019-01-17 13:28:38

标签: c# mongodb docker asp.net-core docker-compose

我在dotnet core 2.2中开发了WebAPI服务。 我将Docker桌面用于带有Linux容器的Windows 我有这个docker-compose文件

version: '3.4'

services:
  mongo:
    image: mongo
    ports:
      - 27017:27017
  mongo-express:
    image: mongo-express
    ports:
      - 8088:8081
    depends_on:
      - mongo
  MyWebApi:
    image: MyWebApi
    build:
      context: .
      dockerfile: MyWebApi/Dockerfile
    ports:
      - 80:80
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:5003
    depends_on:
      - mongo

以及用于我的Web api的此Dockerfile:

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
#EXPOSE 443

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["TMSApi/TMSApi.csproj", "TMSApi/"]
COPY ["BusinessEntities/BusinessEntities.csproj", "BusinessEntities/"]
COPY ["TMSService/TMSService.csproj", "TMSService/"]
COPY ["TMSRepository/TMSRepository.csproj", "TMSRepository/"]
RUN dotnet restore "TMSApi/TMSApi.csproj"
COPY . .
WORKDIR "/src/TMSApi"
RUN dotnet build "TMSApi.csproj" -c Debug -o /app

FROM build AS publish
RUN dotnet publish "TMSApi.csproj" -c Debug -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "TMSApi.dll", "--environment=Development"]

在我的webapi appsettings.json中,我使用以下连接字符串:

mongodb://mongo:27017

在docker-compose文件中,我有3个服务:mongo,mongo-express和MyWebApi 当我使用localhost:8088时,mongo-express已连接到mongo。

但是当MyWebApi尝试连接到mongo服务时,我超时了。

您知道如何解决此问题吗?我想让它在docker容器中运行

我发现了一些有关该主题的最新文章,但没有结果...

谢谢

2 个答案:

答案 0 :(得分:1)

我解决了问题

网络api尝试访问主机mongotms而不是mongo(我在stacktrace中看到了这一点)。在昨天早上的测试中,我将服务名称和设置从mongo更改为mongotms,然后构建了映像。当我改变主意并回滚所做的更改之后,请重新构建映像,但它保留了旧的mongo服务名称。

答案 1 :(得分:0)

您的docker-compose.yml是正确的,并且您使用的网址也是正确的。我认为问题是– mongo的启动时间比You​​rWebApi花费的时间更长,并且您只是尝试在尚未准备就绪的情况下连接到数据库。

depends_on字段仅控制开始顺序,但不保证服务已准备就绪。

因此,请尝试在应用程序中添加一些超时。如果可行,只需引入wait-for方法-等待远程套接字打开。这是解决问题的标准方法。

相关问题