我应该使用docker的用户机密或环境variables

当使用docker与asp.net核心进行开发时,我应该使用用户机密还是环境variables? 我正在使用Visual Studio 2017在添加一个使用microsoft / aspnetcore:1.1的项目时创build的默认docker文件,我相信这是一个linux映像。

如何在Docker中设置用户密码/环境variables,以便在启动时设置它们,但不包含在源代码中?

环境variables更好 – https://12factor.net/config

如果你运行docker运行dockerdocker run使用-e--env-file选项: https : --env-file

如果使用env_file docker-compose use environmentenv_file key运行env_file : https : env_file

为了生产目的,你需要使用环境variables,而不是使用秘密。 只有在开发过程中才有安全存储的秘密,通过帮助防止敏感数据存储在代码/签入源代码控制中:

秘密pipe理器工具不encryption存储的秘密,不应该被视为一个受信任的商店。 它仅用于开发目的。 键和值存储在用户configuration文件目录中的JSONconfiguration文件中。


作为环境variables的替代,您可以考虑使用“外部”键值存储,例如Consul , Vault等。


关于docker中的环境variables,SO已经有了相关的问题/答案。 请参阅如何将环境variables传递给Docker容器? 作为例子。

我决定添加另一个名为appsettings.secrets.json的appsettings文件,而不是使用用户机密或环境variables。 然后在构造函数中添加像其他appsettings文件的文件:

  var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile("appsettings.secrets.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); 

只要确保将appsettings.secrets.json添加到.gitignore文件中,以便它不被添加到源代码pipe理。 用户密码和环境variables仍然可以使用。