在Docker容器中运行PostgreSQL数据库时,官方PostgreSQL Docker镜像的文档指定管理员密码应该设置在环境变量中,例如:
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
对于那些不想在脚本中硬编码纯文本密码的人,有更安全的选择吗?
在Docker容器中运行PostgreSQL数据库时,官方PostgreSQL Docker镜像的文档指定管理员密码应该设置在环境变量中,例如:
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
对于那些不想在脚本中硬编码纯文本密码的人,有更安全的选择吗?
将配置设置作为环境变量注入是12 factor app网站推荐的应用程序配置方法。
或者,您可以创建自己的容器,从自定义配置文件中读取其配置:
docker run -d mydockerapp --config mydevconfig.yaml
但实际上,使用环境变量在灵活性方面具有优势,因为它在所有平台上都是普及的。为了使环境变量更易于使用,您可以在文件中指定它们。这样至少可以确保同一台机器上的恶意用户无法从进程列表中获取凭据:
$ cat env.db
POSTGRES_DB=myappdb
POSTGRES_USER=admin
POSTGRES_PASSWORD=pleasechangeme
$ docker run --name postgres --env-file=env.db -d postgres
最后,我发现Docker有许多出色的功能请求,以改进对密钥的支持:
根据我的经验,方便性往往胜过安全性,因此我想这需要时间才能使可接受的解决方案得到足够的关注。个人预计会出现一种解决方案,仿效Kubernetes项目对加密数据卷的处理: