我应该在 docker 中使用用户机密还是环境变量

dar*_*k_c 9 docker .net-core asp.net-core

使用 docker 和 asp.net core 进行开发时,我应该使用用户机密还是环境变量?我正在使用 Visual Studio 2017 在添加项目时创建的默认 docker 文件,该文件使用 microsoft/aspnetcore:1.1,我认为是 linux 映像。

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

vla*_*mir 14

对于开发,我依赖 .net秘密管理器工具

  1. 使用dotnet user-secrets将机密存储在本地计算机上
dotnet user-secrets init

dotnet user-secrets set "Movies:ServiceApiKey" "12345"
..
Run Code Online (Sandbox Code Playgroud)

请参阅MS 文档:ASP.NET Core 开发中应用程序机密的安全存储

  1. 将包含机密的本地文件夹挂载到 Docker 容器

Docker 示例:

docker run ^
  -e ASPNETCORE_ENVIRONMENT=Development ^
  -v %APPDATA%/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro  ^
  company/image:latest
Run Code Online (Sandbox Code Playgroud)

docker-compose 的示例:

version: "3.8"

..

  net_core_service:
    ..
    environment:
      # should be defined Development-env to allow loading user-secrets located on the local computer.
      - ASPNETCORE_ENVIRONMENT=Development
    ..
    volumes:
      # map the dotnet user-secret folder
      - $APPDATA/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
    ..

..
Run Code Online (Sandbox Code Playgroud)

  • @Hazelへいぜる是的,但该容器只会在本地存在这些值,所以不用担心。 (2认同)

luc*_*nov 6

环境变量更好 - https://12factor.net/config

docker run如果您使用use-e或option运行 docker --env-filehttps://docs.docker.com/engine/reference/run/#env-environment-variables

docker-compose如果您使用useenvironmentenv_filekey 运行 docker :https: //docs.docker.com/compose/environment-variables/


Set*_*Set 5

出于生产目的,您需要使用环境变量,而不是 use-secrets。通过帮助防止敏感数据存储在代码中/签入源代码控制,秘密用于在开发过程中安全存储:

Secret Manager 工具不会加密存储的机密,不应将其视为受信任的存储。它仅用于开发目的。键和值存储在用户配置文件目录中的 JSON 配置文件中。


作为环境变量的替代方案,您可以考虑使用“外部”键值存储,例如ConsulVault等。


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