添加docker文件时,Asp.net核心webapi连接到mongo docker映像时出错



我开发了一个简单的dotnet核心api,它连接到mongo docker镜像。该应用程序与以下uri完美配合(mongodb://localhost:27017):mongo连接字符串

{
"MongoDB": {
"Database": "messagesdb",
"Host": "localhost",
"Port": 27017,
"User": "",
"Password": ""
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}

JSON响应Json成功运行后的响应

但是,当我通过visualstudio添加一个docker文件,并将settings.json文件中的主机设置为mongo而不是localhost时,如图所示(mongodb://mongo:27017):mongo连接字符串

Docker文件:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["ErrorMessagesAPI.csproj", ""]
RUN dotnet restore "./ErrorMessagesAPI.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "ErrorMessagesAPI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ErrorMessagesAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ErrorMessagesAPI.dll"]

为mongo编写的docker:

version: '3.8'
services:
mongo:
image: mongo
container_name: mongo
restart: always
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
mongo-express:
image: mongo-express
container_name: mongo-express
restart: always
ports:
- "8081:8081"
depends_on:
- mongo  
volumes:
mongo-data:
driver: local

如下图所示,API不起作用:docker运行结果,完整的代码可以在这里找到MessageAPI

我正在关注这里的文章Docker+MongoDB+.NET Core=一个好时机有人能帮忙吗?

我想分享我对这个问题的解决方案,这样您就可以从中受益。要链接到mongo映像,您应该更新docker compose文件,并保持设置不变。在docker compose中提供环境变量将重写settings.json文件中的设置,如下所示:

version: '3.1'
services:
mongo:
image: mongo
restart: always
ports:
- 27017:27017
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
depends_on:
- mongo
todo-server:
build: .
restart: always
ports:
- 5000:80
environment:
MongoDB__Host: mongo
depends_on:
- mongo

最新更新