我试图覆盖以下位于ASP.NET Core API上appsettings.json
内的连接字符串。
"ConnectionStrings": {
"Connection": "Server=localhost\\SQLEXPRESS;Database=NetCoreSample;User Id=sa;Password=sa;MultipleActiveResultSets=true"
},
为此,我在AddEnvironmentVariables()
中添加了HostBuilder
:private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddEnvironmentVariables();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
我的Dockerfile
如下:FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /src
COPY . ./
ENV CONNECTIONSTRINGS__CONNECTION="Server=sql-server;Database=NetCoreSample;User Id=sa;Password=sa@a2020;MultipleActiveResultSets=true"
WORKDIR /src/Api
RUN dotnet restore
RUN dotnet publish -c Release -o out --no-restore
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
COPY --from=build-env /src/Api/out .
ENTRYPOINT ["dotnet", "Api.dll"]
EXPOSE 80
请注意,我的API和SQLServer是基于docker-compose
构建的。但是,当我尝试运行该镜像时,我的API会抛出此错误,该错误与连接字符串有关。
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
如果我手动覆盖.json
文件上的连接字符串,它就可以正常工作。所以对我来说很明显,我的ConnectionString
没有被正确覆盖。我在这里做错了什么?
最佳答案
您可以为每种环境使用不同的appsetings.json
文件。请参见here示例。
然后,您可以使用ASPNETCORE_ENVIRONMENT
使用所需的环境名称运行容器。
对于容器,请使用this:
docker run -e ASPNETCORE_ENVIRONMENT=environment_name ...
您可以看到如何为compos here设置环境变量。
关于c# - 如何使用Dockerfile覆盖ASP.NET Core连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64196957/