首页 > 解决方案 > .Net Core 5 Docker Alpine 图像连接到 Mongo Atlas DB

问题描述

我似乎无法弄清楚如何从在 docker 容器内运行的 .net core 5 web api 项目连接到我的 atlas db。当我使用 kestrel 在本地运行应用程序时,我可以毫无问题地连接和查询数据。docker 运行时镜像是 aspnet:5.0-alpine。我正在为 SSL 和 HTTPS 配置使用自签名开发证书,它按预期工作。我正在将 .pfx 文件复制到 docker 容器中。我相信这个问题与mongodb atlas需要的TLS/SSL认证过程有关。我正在使用 MongoDB.Driver 版本 2.13.1。在连接到数据库之前,我尝试加载 SSL 证书并将其包含在客户端设置中,但这也失败了。我也在 mongodb 社区论坛和在线上进行了很多搜索,但只找到了描述问题的帖子,没有任何解决方案。

下面是我的码头文件。

FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS build-env
WORKDIR /app

COPY ["Hammerhead.Common/Hammerhead.Common.csproj", "Hammerhead.Common/"]
COPY ["Hammerhead.Data/Hammerhead.Data.csproj", "Hammerhead.Data/"]
COPY ["Hammerhead.DataProvider/Hammerhead.DataProvider.csproj", "Hammerhead.DataProvider/"]
COPY ["Hammerhead.Services/Hammerhead.Services.csproj", "Hammerhead.Services/"]
COPY ["Hammerhead.App/Hammerhead.App.csproj", "Hammerhead.App/"]

RUN dotnet restore "Hammerhead.App/Hammerhead.App.csproj"

COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine as runtime

# SQL culture fix
RUN apk add icu-libs
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

#ENV ASPNETCORE_URLS_ http://+:5000;https://+:5001

WORKDIR /app
COPY --from=build-env /app/out .

COPY ./Hammerhead.pfx ./

ENTRYPOINT ["dotnet", "Hammerhead.App.dll"]

下面如果 docker-compose

version: "3"
services:
    rabbitmq:
        image: masstransit/rabbitmq:latest
        ports:
          - "5672:5672"
          - "15672:15672"
    seq:
        image: datalust/seq:latest
        ports:
          - 8081:80
          - 5341:5341
        environment:
          ACCEPT_EULA: "Y"
    trading-app:
        build:
            context: .
            dockerfile: Dockerfile-App
        ports:
            - 5000:80
            - 5001:443
        depends_on:
            - rabbitmq
            - seq
        environment:
            ASPNETCORE_URLS: "https://+;http://+"
            ASPNETCORE_ENVIRONMENT: "Development"
            ASPNETCORE_Kestrel__Certificates__Default__Password: "password"
            ASPNETCORE_Kestrel__Certificates__Default__Path: "./Hammerhead.pfx"
            ASPNET_CORE_HTTPS_PORT: 5001
            Serilog__WriteTo__1__Args__serverURL: "http://seq:5341"
            RABBIT_HOSTNAME: "rabbitmq"

下面是我用来连接的 MongoDB.Driver 代码。

string connectionString = "";
MongoClientSettings settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
settings.SslSettings = new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12 };
var mongoClient = new MongoClient(settings);

我还测试了批准代码的多次迭代,但均未成功。此外,我在尝试检索数据时没有收到任何错误。它返回一个空集。

标签: docker.net-coremongodb-atlas

解决方案


推荐阅读