我正在使用 Secrets 来管理用户名、密码和 dbname,并使用 Docker 堆栈将 Postgres 作为数据库。我现在想使用 Docker 提供的健康检查功能。
码头工人-compose.yml
x-db-secrets: &db_secrets
- psql_user
- psql_pass
- psql_dbname
services:
db:
image: postgres:13.1
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER_FILE=/run/secrets/psql_user
- POSTGRES_DB_FILE=/run/secrets/psql_dbname
- POSTGRES_PASSWORD_FILE=/run/secrets/psql_pass
secrets: *db_secrets
healthcheck:
test: pg_isready -U myuser -d db_prod
interval: 10s
timeout: 3s
retries: 3
(... other services...)
volumes:
postgres_data:
static_content:
media_content:
secrets:
psql_user:
external: true
psql_pass:
external: true
psql_dbname:
external: true
正如本healthcheck:
节中所指出的,我将使用运行状况检查公开数据库用户名和数据库名称。我的问题(根据答案进行一些跟进):
- 有关系吗?docker-compose.yml 文件不在运行此代码的主机上。因此,潜在的攻击者将无法从那里访问此信息......但是,由于 docker 将执行运行状况检查,它可能会在该容器中实时跟踪(shell?docker configs 存储该过程的文件?)
- 如果它确实重要,我如何在不暴露该信息的情况下执行健康检查?我必须直接使用这些秘密,但是我不知道如何使用docker-compose文件中的秘密......
想法?解决方法?
额外细节:
- 我目前正在检查数据库是否从使用它的(烧瓶)容器中启动。例如,烧瓶服务检查它是否可以 ping 数据库。但是,我宁愿将事物分开,而 DB 容器应该是一个告诉它是否健康的容器(imo)。