我正在使用 secrets 管理用户名、密码和数据库名称,在使用 Postgres 作为数据库的 Docker stack 中。现在,我想使用 Docker 提供的健康检查功能。
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配置文件?)
- 如果很重要,我怎样才能在不暴露该信息的情况下执行健康检查?我必须直接使用secrets,但我无法弄清楚如何在docker-compose中使用secrets...
想法?解决方法?
其他详细信息:
- 我目前正在检查(flask)容器是否能够使用它。例如,flask服务会检查是否可以ping DB。但是,我宁愿对事物进行隔离,而DB容器应该是告诉它是否健康的人(im o)。