Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用Dockerfile覆盖ASP.NET核心连接字符串_C#_Asp.net_.net_Docker - Fatal编程技术网

C# 如何用Dockerfile覆盖ASP.NET核心连接字符串

C# 如何用Dockerfile覆盖ASP.NET核心连接字符串,c#,asp.net,.net,docker,C#,Asp.net,.net,Docker,我正在尝试覆盖以下连接字符串,该字符串位于ASP.NET核心API上的appsettings.json中 “连接字符串”:{ “连接”:“Server=localhost\\SQLEXPRESS;Database=NetCoreSample;User Id=sa;Password=sa;MultipleActiveResultSets=true” }, 为此,我将AddEnvironmentVariables()添加到我的HostBuilder: private静态IHostBuilder C

我正在尝试覆盖以下连接字符串,该字符串位于ASP.NET核心API上的
appsettings.json

“连接字符串”:{
“连接”:“Server=localhost\\SQLEXPRESS;Database=NetCoreSample;User Id=sa;Password=sa;MultipleActiveResultSets=true”
},
为此,我将
AddEnvironmentVariables()
添加到我的
HostBuilder

private静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext,config)=>
{
config.AddEnvironmentVariables();
})
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
});
我的
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
文件上手动重写连接字符串,它就可以正常工作。因此,我很清楚,我的
连接字符串
没有被正确覆盖


我做错了什么?

您可以为每个环境使用不同的
appsetings.json
文件。见样本

然后,您可以使用
ASPNETCORE\u environment
以所需的环境名称运行容器。 容器使用:


您可以看到如何为compose设置env变量。

您可以使用构建脚本在构建应用程序和创建包时将正确的连接字符串写入设置文件。为什么不为每个环境添加不同的
appsettings.json
文件?请检查@SergeyNazarov,实际上我认为是一个新的
appsettings.json
会是一个更好的主意。但是他们知道我如何在我的
Dockerfile
上更改我的环境?@rogerosmitt
docker run-e ASPNETCORE\u environment=docker
其中docker环境名称。
docker run -e ASPNETCORE_ENVIRONMENT=environment_name ...