在docker-compose文件中如何隐藏保存在变量中的敏感信息

131次阅读
没有评论

问题描述

在使用DevOps过程中遇到了问题。他已经建立了一个用于他的开源项目的CI/CD流程。他的代码在GitHub上提交后,Travis CI会构建代码的新的Docker镜像,并将其推送到DockerHub。接着,在他的.travis.yml文件的after_success步骤中,会通过SSH连接到他的VPS,运行一个脚本,其中包括docker-compose down以及docker-compose pull && docker-compose up命令。

虽然一切似乎都正常运行,但他在他的docker-compose.yml文件中遇到了一个问题。他的环境变量都存储在这个文件中,但这些环境变量包含敏感信息。他想知道如何在不影响现有功能的情况下,从docker-compose.yml文件中隐藏这些环境变量。

他已经尝试将环境变量放入一个名为variables.env的文件中,并与docker-compose.yml放在同一个目录中。但在Travis CI中,他遇到了一个关于空格的错误。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

使用环境变量来保护敏感信息

在Docker Compose中,为了保护敏感信息,你可以使用环境变量。这样可以避免将敏感信息直接存储在docker-compose.yml文件中。

以下是一些解决方案来处理敏感信息的环境变量:

方案1:使用.env文件

  1. 在你的项目根目录中创建一个名为.env的文件。
  2. .env文件中,以键值对的方式定义你的环境变量。例如:
    Database__DefaultConnectionString=Server=database;Port=5432;Database=bejebeje_identity;User Id=postgres;Password=admin;
  3. 在你的docker-compose.yml文件中,使用${ENV_VARIABLE}语法引用环境变量,例如:
    yaml
    version: '3'
    services:
    your_service:
    image: your_image
    environment:
    - CONNECTION_STRING=${Database__DefaultConnectionString}
    # 其他配置...

    这里的CONNECTION_STRING环境变量会从.env文件中读取。

方案2:在Shell中设置环境变量

你也可以在执行docker-compose up命令的Shell中设置环境变量,这些变量将覆盖.env文件中的变量。

无论是使用.env文件还是在Shell中设置环境变量,都能确保敏感信息不会直接暴露在docker-compose.yml文件中。

附注

如果你在使用.env文件时遇到空格问题,请确保在.env文件中的每个键值对中不包含空格。

阅读更多关于Docker Compose环境变量的信息:https://docs.docker.com/compose/environment-variables/

请注意:根据你的具体情况,可能需要进行适当的调整和测试,以确保方案适用于你的环境和需求。

总结

通过使用环境变量,你可以有效地保护敏感信息,同时确保Docker Compose配置文件的安全性。无论是使用.env文件还是在Shell中设置环境变量,都能让你的应用在不暴露敏感信息的情况下正常运行。

正文完