乐闻世界logo
搜索文章和话题

如何在非Swarm环境中使用Docker secrets?

4 个月前提问
4 个月前修改
浏览次数22

1个答案

1

在Docker的生态系统中,Docker Secrets主要被设计用于在Swarm模式下安全地管理敏感数据。然而,在非Swarm环境,比如单个Docker主机或使用Docker Compose时,Docker Secrets直接的支持并不可用。不过,有一些方法可以模拟Docker Secrets的功能,以确保敏感信息的安全性。以下是在非Swarm环境中使用Docker secrets的一些方法:

1. 使用环境变量

虽然使用环境变量存储敏感信息并不是最安全的方法(因为它们可能会被日志记录或通过其他方式泄露),但这是最简单的一种方式。你可以在运行容器时通过命令行传递环境变量,例如:

bash
docker run -e MYSQL_PASSWORD='mysecretpassword' mymysqlimage

2. Docker Compose 和 .env 文件

在使用 Docker Compose 时,可以通过 .env 文件来管理环境变量,而不是直接在 docker-compose.yml 文件中硬编码。.env 文件应该被添加到 .gitignore 中,确保它不会被意外提交到版本控制系统中。

docker-compose.yml 示例:

yaml
version: '3' services: myservice: image: myimage env_file: - .env

.env 文件示例:

shell
MYSQL_PASSWORD=mysecretpassword

3. 使用 Docker Secret Management 工具

有一些第三方工具,如 HashiCorp VaultAWS Secrets ManagerAzure Key Vault,可以用来在Docker环境中安全管理秘密信息。这些工具提供了更高级的秘密管理功能,比如秘密的自动旋转、审计、以及访问控制。

例如,使用 HashiCorp Vault,你可以从容器内部访问秘密信息,而这些信息永远不会明文出现在配置文件或代码中。

4. 使用挂载卷存储秘密文件

你可以将敏感信息存储在主机的一个安全位置,并在启动容器时将其挂载到容器内部的指定位置。这样,应用可以直接从文件系统读取这些秘密信息,而不必将它们作为环境变量传递。

Docker 命令示例:

bash
docker run -d \ --name myapp \ -v /path/to/secrets:/path/in/container:ro \ myimage

这种方法安全性较高,因为文件只在需要时被挂载到容器中,而且可以设置为只读。

结论

虽然在非Swarm环境中,Docker没有内建的Secrets管理功能,但通过以上方法,我们仍然可以有效地管理和保护敏感数据。选择哪一种方法取决于具体的使用场景和安全需求。在处理非常敏感的信息时,推荐使用专业的秘密管理工具,以提供更强的安全保障。

2024年8月9日 14:37 回复

你的答案