是否存在使用环境变量来控制Docker行为的原生或普遍接受的方法,即以12种方式?
我见过的唯一与语言无关的方法是使用-e变量污染docker run命令.我见过的最易维护的解决方案是使用cat和sed的组合来使用.env文件生成CLI参数:https://twitter.com/DataKyle/status/422843345120296960
我们目前使用Vagrant for dev,一个用于测试和部署的CI / CD托管提供商,以及AWS Elastic Beanstalk作为暂存和生产PAAS.我们的应用程序有超过100个可配置参数,其中大部分都设置为默认值,但每个环境仍需要自定义大约10-20个.使用像这样的大量命令行变量运行docker似乎太麻烦了.
此外,它不允许您从docker主机中获取变量(例如CI提供程序预先安装的Redis或Postgres凭据),而无需进一步破解.
此外,您可以让docker进一步交互: – volumes-from可以从引用的容器中挂载所有卷,而–link让容器知道引用容器的公开端口的详细信息.
虽然Docker run reference目前有点弱,但您可以在CLI参考号run section以及container linking reference中找到所有详细信息.
至于从容器开始的内容.通常我建议启动一个shell脚本,它设置默认环境变量(沿着:${ENV:= default_value}行),导出它们,然后执行一个可执行文件.此可执行文件可以是前台中的所需应用程序,也可以是runit或supervisord之类的init替换.
我不建议在你的docker中运行sshd,如果它不是系统的一部分(例如,gitlab的容器应该包含sshd,因为它通过ssh提供git repo访问).出于维护或调试目的,我建议使用nsenter.