我将我的应用程序放在一个容器中,它正在读取环境变量以获取密码和 API 密钥以访问服务。如果我在我的机器上运行应用程序(而不是在 docker 内),我只是export SERVICE_KEY='wefhsuidfhda98'
和应用程序可以使用它。
对此的标准方法是什么?我正在考虑有一个秘密文件,该文件将通过export
命令添加到服务器,然后source
在该文件上运行。
我正在使用码头工人和无花果。
我确定的解决方案如下:将环境变量保存在一个秘密文件中,并使用 fig 将它们传递给容器。
有一个secret_env
包含秘密信息的文件,例如
export GEO_BING_SERVICE_KEY='98hfaidfaf'
export JIRA_PASSWORD='asdf8jriadf9'
secret_env
我的.gitignore
为开发人员提供secret_env.template
文件,例如
export GEO_BING_SERVICE_KEY='' # can leave empty if you wish
export JIRA_PASSWORD='' # write your pass
在我的fig.yml
我通过以下方式发送变量:
environment:
- GEO_BING_SERVICE_KEY
- JIRA_PASSWORD
source secret_env
建前打电话docker run
提供环境变量:
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
从安全角度来看,如果您的 docker 二进制文件需要 root 访问权限,则前一个解决方案并不比在您的主机上运行它差。如果您允许“docker”组用户运行 docker,那么安全性会降低,因为任何 docker 用户都可以docker inspect
运行容器。在您的主机上运行,您需要以 root 身份检查正在运行的进程的环境变量。