繁体   English   中英

如何使用 Dockerfile 覆盖 ASP.NET Core 连接字符串

[英]How to override ASP.NET Core connection string with Dockerfile

我正在尝试覆盖位于 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文件。 请参阅此处的示例。

然后,您可以使用ASPNETCORE_ENVIRONMENT运行具有所需环境名称的ASPNETCORE_ENVIRONMENT 对于容器使用这个

docker run -e ASPNETCORE_ENVIRONMENT=environment_name ...

您可以在此处查看如何为 compose 设置 env 变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM