【发布时间】:2020-10-05 04:26:12
【问题描述】:
我正在尝试覆盖位于 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 没有被正确覆盖。
我在这里做错了什么?
【问题讨论】:
-
您可以让构建脚本在构建应用程序和创建包时将正确的连接字符串写入设置文件。
-
为什么您不想为每个环境添加不同的
appsettings.json文件? -
@SergeyNazarov 实际上我认为新的
appsettings.json会是一个更好的主意。但是他们如何更改我的Dockerfile上的环境? -
@RogerioSchmitt
docker run -e ASPNETCORE_ENVIRONMENT=docker其中 docker 环境名称。 docs.docker.com/engine/reference/run/#env-environment-variables