【问题标题】:How to override ASP.NET Core connection string with Dockerfile如何使用 Dockerfile 覆盖 ASP.NET Core 连接字符串
【发布时间】: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

标签: c# asp.net .net docker


【解决方案1】:

您可以为每个环境使用不同的appsetings.json 文件。查看示例here

然后您可以使用ASPNETCORE_ENVIRONMENT 以所需的环境名称运行您的容器。 对于容器使用this:

docker run -e ASPNETCORE_ENVIRONMENT=environment_name ...

您可以查看如何为 compose here 设置环境变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2018-05-23
    相关资源
    最近更新 更多