【发布时间】:2025-12-24 10:05:15
【问题描述】:
假设我们有一个由 .yml 文件配置的 docker 堆栈,其中包含 3 个服务 - a、b 和 c。此外,这些服务使用了很多秘密。两个用于数据库、Azure 服务,每个服务都有一些独特的。因此,我们的 .yml 文件如下所示:
version: '3.4'
services:
a:
image: a-image
[...]
secrets:
-db.pwd
-db.user
-azure.secret_key
-azure.public_key
-a.secret_key1
-a.secret_key2
b:
image: b-image
[...]
secrets:
-db.pwd
-db.user
-b.secret_key1
-b.secret_key2
c:
image: c-image
[...]
secrets:
-db.pwd
-db.user
-azure.secret_key
-azure.public_key
-c.secret_key1
-c.secret_key2
secrets:
db.pwd:
external: true
db.user:
external: true
azure.secret_key:
external: true
azure.public_key:
external: true
a.secret_key1:
external: true
a.secret_key2:
external: true
b.secret_key1:
external: true
b.secret_key2:
external: true
c.secret_key1:
external: true
c.secret_key2:
external: true
如您所见,每个服务都重复了一些秘密。 docker-compose 文件有“扩展字段”之类的东西 - https://docs.docker.com/compose/compose-file/#extension-fields 有什么办法可以使用这个扩展字段来避免重复秘密? 像这样的:
version: '3.4'
x-common-db-secrets: &db-secrets
- db.user
- db.pwd
x-common-azure-secrets: &azure-secrets
- azure.public_key
- azure.secret_key
services:
a:
image: a-image
[...]
secrets:
<<: *db-secrets
<<: *azure-secrets
-a.secret_key1
-a.secret_key2
b:
image: b-image
[...]
secrets:
<<: *db-secrets
-b.secret_key1
-b.secret_key2
c:
image: c-image
[...]
secrets:
<<: *db-secrets
<<: *azure-secrets
-c.secret_key1
-c.secret_key2
secrets:
[...]
我正在使用此扩展字段来共享环境变量。但是解析扩展字段所需的结构是map。 “秘密”部分需要列表。有谁知道如何处理它吗?请注意,将来可以添加新的秘密,例如用于旧服务和新服务,因此解决方案必须灵活。我将不胜感激找到答案。正在寻找任何 compose 版本 3.4+ 的答案。
【问题讨论】:
标签: docker docker-compose yaml devops docker-swarm