Docker:如何向容器提供秘密信息?

我有我的应用程序在一个容器内,它正在读取密码和API密钥的环境variables来访问服务。 如果我在我的机器上运行应用程序(不在泊坞内),我只是export SERVICE_KEY='wefhsuidfhda98'和应用程序可以使用它。

这是什么标准的方法? 我正在考虑有一个秘密文件,将被添加到服务器与export命令,然后运行该文件的source

我正在使用docker&无花果。

我解决的解决scheme如下:将环境variables保存在一个秘密文件中,并将其传递给容器。

  • 有秘密信息的secret_env文件,例如

     export GEO_BING_SERVICE_KEY='98hfaidfaf' export JIRA_PASSWORD='asdf8jriadf9' 
  • 在我的.gitignoresecret_env
  • 有一个secret_env.template文件的开发者,例如

     export GEO_BING_SERVICE_KEY='' # can leave empty if you wish export JIRA_PASSWORD='' # write your pass 
  • 在我的fig.yml我通过发送variables:

     environment: - GEO_BING_SERVICE_KEY - JIRA_PASSWORD 
  • 在构build之前调用source secret_env

docker run提供了环境variables:

 docker run -e SERVICE_KEY=wefsud your/image 

然后你的应用程序会从环境中读取SERVICE_KEY。
https://docs.docker.com/reference/run/

在图中,你会使用

 environment: - SERVICE_KEY: wefsud 

在你的应用程序规范。 http://www.fig.sh/yml.html

从安全angular度来看,如果您的docker二进制文件需要root访问权限,以前的解决scheme并不比在主机上运行更糟糕。 如果允许“docker”组用户运行docker,则不太安全,因为任何docker用户都可以通过docker inspect运行中的容器。 在你的主机上运行,​​你需要root权限来检查正在运行的进程的环境variables。