通过docker-compose启动postgres后外部连接找不到指定数据库如何解决
问题排查与解决步骤
1. 端口占用排查
首先确认宿主机5432端口确实被当前启动的PostgreSQL容器占用:
- Linux/macOS 执行命令:
sudo lsof -i :5432 - Windows 执行命令:
netstat -ano | findstr 5432
如果监听进程不是docker相关进程,说明你本地安装的PostgreSQL服务占用了该端口,两种解决方案: - 停止本地PostgreSQL服务后重启docker容器
- 修改docker-compose.yml中ports配置为
- "5433:5432",重启容器后使用5433端口连接
2. 连接参数校验
外部连接时请严格使用以下参数,避免配置错误:
- 主机地址:填
127.0.0.1,不要使用localhost,部分环境下localhost会默认走本地套接字连接宿主机自带的PostgreSQL服务,不会走TCP协议连接docker容器 - 端口:和docker-compose中映射的宿主机端口一致,默认是5432
- 用户名:
postgres - 密码:
my_password - 数据库名:必须显式指定
demo,部分工具默认会连接和用户名同名的postgres库,未指定的话就会提示demo库不存在
你可以先通过psql命令行工具测试连通性,排除工具配置问题:
psql -h 127.0.0.1 -p 5432 -U postgres -d demo
输入密码my_password后如果能正常进入PostgreSQL命令行,说明服务正常,是你所用的外部工具配置错误。
3. 容器初始化残留排查
PostgreSQL官方Docker镜像仅会在首次启动、数据卷为空时读取POSTGRES_DB、POSTGRES_USER等环境变量执行初始化操作,如果你是中途修改docker-compose.yml新增的POSTGRES_DB: demo配置,重启容器不会触发重新初始化,你手动在容器内建库后如果仍无法外部访问,可执行以下命令重置容器状态:
# 停止并删除容器,同时删除关联的匿名数据卷 docker-compose down -v # 重新启动容器 docker-compose up -d
重置完成后再按照上面的参数连接即可。
内容的提问来源于stack exchange,提问作者fxvlad
相关产品推荐
相关产品推荐

