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

标签 c# asp.net .net docker

我试图覆盖以下位于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/

相关文章:

c# - 如何从考勤机获取数据

c# - 从另一个进程访问对象

c# - 在 Entity Framework 中使用 Postgis 的几何类型

c# - XDocument 到字符串 : How to omit encoding in declaration?

c# - IP 地址验证

c# - 在 Java 应用程序中解析 C#

c# - 为解决方案中的特定项目禁用 stylecop 分析

asp.net - 无需按 CTRL 键即可多选列表框

c# - 加载用户的 DirectoryEntry 的最有效方法是什么?

.net - "You are not allowed to edit this selection because it is protected."但仅从 Office 2013 开始?