docker-compose启动PostgreSQL报错FATAL: database does not exist如何解决
问题根因
报错database "preferences" does not exist的核心触发原因分为两类:
- 你配置中声明的
dev-postgres-data为外部持久化卷,若该卷此前已被使用、且首次初始化时未配置POSTGRES_DB=preferences参数,PostgreSQL容器后续启动只会读取卷内已有数据,不会重复执行初始化逻辑创建新库。POSTGRES_DB等环境变量仅在卷为空、容器首次初始化时生效。 - 挂载到
/docker-entrypoint-initdb.d/目录下的初始化脚本存在执行错误,导致初始化流程中断,未完成preferences库的创建。
解决步骤
无存量数据需要保留
- 停止并删除当前运行的容器:
docker-compose down - 删除已存在的外部卷(会清空卷内所有PostgreSQL数据):
docker volume rm dev-postgres-data - 检查
./docker/postgres目录下的所有.sql、.sh格式初始化脚本,确认无语法错误、执行不会异常中断 - 重新启动服务即可验证:
docker-compose up
需要保留卷内存量数据
- 先启动PostgreSQL容器,忽略当前报错
- 进入容器手动创建缺失的库:
docker exec -it $(docker-compose ps -q postgres) psql -U user -c "CREATE DATABASE preferences;" - 重启容器验证健康检查是否通过:
docker-compose restart postgres
注:你配置中的健康检查语法无问题,
$$转义符合docker-compose变量转义规则,无需调整。
内容的提问来源于stack exchange,提问作者Melchia
相关产品推荐
相关产品推荐

