本地运行PostgreSQL时连接Docker内TimescaleDB失败如何解决
问题原因
- 核心错误为Docker端口映射配置错误:TimescaleDB基于PostgreSQL实现,官方镜像默认在容器内部监听
5432端口,你启动容器时错误将宿主机5433端口映射到了容器内部的5433端口,容器内部没有服务监听5433端口,因此连接请求到达容器后被直接拒绝。 docker ps输出中显示的5432/tcp就是镜像默认声明暴露的服务端口,你之前的启动命令没有正确映射该端口,仅映射了无服务监听的5433端口。
解决方案
方法1:修改容器端口映射(推荐)
- 停止并删除现有配置错误的容器:
docker stop timescaledb docker rm timescaledb
- 重新执行启动命令,调整端口映射规则,将宿主机5433端口映射到容器内部的5432端口:
docker run -d --name timescaledb -p 127.0.0.1:5433:5432 -e POSTGRES_PASSWORD=somepass timescale/timescaledb:latest-pg12
- 原有psycopg2连接代码、配置参数不需要修改,直接运行即可正常连接。
方法2:修改容器内PostgreSQL监听端口(不推荐)
如果需要保留现有端口映射规则,可进入容器修改PostgreSQL配置文件,将服务监听端口改为5433,重启容器后即可连接。但该方案修改的是容器内部配置,容器重建后配置会丢失,不建议使用。
补充验证
端口映射调整完成后如果仍报错,可执行以下命令进入容器确认etfdb数据库是否存在,不存在的话直接创建即可:
docker exec -it timescaledb psql -U postgres -c "CREATE DATABASE etfdb;"
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

