虽然有些晚了,但我认为我的解决方案能帮到其他人。
步骤1:将appsettings放入"Settings/appsettings.json"文件夹中。
这是我的appsettings.json内容:
{
"ConnectionString": "Data Source=local
}
步骤2. 从Asp.net Core编辑代码。
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
namespace Repos.Configs
{
public static class ConfigurationManager
{
public static string currentPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
public static IConfiguration AppSetting { get; }
static ConfigurationManager()
{
AppSetting = new ConfigurationBuilder()
.SetBasePath(currentPath)
.AddJsonFile("Settings/appsettings.json")
.Build();
}
}
}
并使用AppSetting。
var connectionString = ConfigurationManager.AppSetting["ConnectionString"]
第三步。现在您必须配置您的Dockerfile,在我的情况下,是通过Visual Studio在Linux容器中创建的。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["Api/Api.csproj", "Api/"]
COPY ["Repos/Repos.csproj", "Repos/"]
COPY ["DataContext/DataContext.csproj", "DataContext/"]
RUN dotnet restore "Api/Api.csproj"
COPY . .
WORKDIR "/src/Api"
RUN dotnet build "Api.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Api.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Api.dll"]
步骤4. 构建镜像。
docker build -t tagForProject .
步骤5. 映射卷并从镜像中运行容器。
docker run -p 44382:80 --volume c:\Docker\Volumes\MyProjectNetCore:/app/Settings --name nameWillDisplayInDockerDashboard -d tagForProject
好的,这里有一个问题,因为Docker会把c:\Docker\Volumes\MyProjectNetCore覆盖为/app/Settings。所以,你必须把appseting.json放到c:\Docker\Volumes\MyProjectNetCore中。
如果不这样做,你的应用程序将无法读取appsetting,因为它在docker卷中不存在。
第6步。在docker仪表板中重新启动你的应用程序,并查看它是否工作。