docker - .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);
我还测试了批准代码的多次迭代,但均未成功。此外,我在尝试检索数据时没有收到任何错误。它返回一个空集。
解决方案
推荐阅读
- python - 通过 Homebrew 在新的 Macbook Pro 上安装后多个 Python 3 解释器之间的区别?
- java - 使用 For 循环的标准偏差不起作用
- python - 在 keras 中训练多类输入输出
- grep - 针对文件的 phpass 哈希列表
- javascript - TypeError:通过express发送数组时将循环结构转换为JSON
- vb.net - VB.NET - 如何创建通知弹出窗口(从底部开始)
- javascript - Javascript. How to check if a false boolean parameter is passed in a function?
- python - 修改 dateutil.parser.parse 参数以纠正日期错误识别
- android - 膨胀布局的根的可见性随着孩子的可见性而变化
- python - dict.items() 返回的列表中元素的顺序是否始终相同?