繁体   English   中英

如何安全地将连接字符串放入 heroku 中的 docker 容器中?

[英]How do I get a connection string into a docker container in heroku securely?

在使用 Heroku 时,我一直在努力寻找一种将连接字符串安全地放入 docker 容器的方法。 这是文档告诉我的:

“我们建议将 ENV 用于运行时变量(例如,GEM_PATH)并使用 heroku 配置作为凭证,这样敏感凭证就不会意外地检查到源代码控制中。”

在这种情况下,对于连接字符串,我想通过 heroku 配置设置一个变量,这就是我所做的。 打到这个尝试使用Heroku的配置:编辑,所以我使用Heroku的配置--json。

这个变量在那里:

  "ConnectionStrings__Default": "MyConnectionString"

现在至于如何在实际的 dockerfile 中传递它,我对 docker 并不擅长,所以很多这都是猜测工作,结合我发现的关于从外部获取连接字符串到 c# here 的内容 我怀疑问题出在附近,所以请告诉我这是否不正确:

# publish
FROM build AS publish
WORKDIR /src/webapplication/webapplication
RUN dotnet publish -c Release -o /src/publish
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=publish /src/publish .
# heroku uses the following
CMD Default=$ConnectionStrings__Default ASPNETCORE_URLS=http://*:$PORT dotnet webapplication.dll

我以这种方式将配置变量插入 docker 中的 aspnet 核心应用程序是否正确? 我能找到的例子很少,所以不确定。

获取连接字符串的代码(在使用 json.config 时有效):

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string basePath = Directory.GetCurrentDirectory();
            if (!optionsBuilder.IsConfigured)
            {
                var builder = new ConfigurationBuilder()
       .SetBasePath(basePath)
       .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

                IConfigurationRoot configuration = builder.Build();

                string connectionString = configuration.GetConnectionString("Default");
                optionsBuilder.UseSqlServer(connectionString)
                    .EnableSensitiveDataLogging();
                optionsBuilder.UseLazyLoadingProxies();

            }
        }

错误:

System.ArgumentNullException: Value cannot be null. (Parameter 'connectionString')

如果有人能给我一些指点,那对我来说意味着整个世界,因为我想部署这个东西,但我不知道该怎么做。

.AddJsonFile()您需要调用.AddEnvironmentVariables()这将使用匹配的环境变量覆盖设置文件中的任何设置。

你的代码应该是这样的

var builder = new ConfigurationBuilder()
    .SetBasePath(basePath)
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables();

另一种选择是在调用docker run时使用-e标志在容器中设置环境变量

https://docs.docker.com/engine/reference/run/#env-environment-variables

暂无
暂无

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

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