You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器内PostgreSQL外部连接方法及服务器端pytest连接失败报错求助

Docker容器内PostgreSQL外部连接方法及服务器端pytest连接失败报错求助

看起来你遇到了Docker容器里PostgreSQL连接的典型问题,本地正常但服务器出错,大概率是监听配置或者连接地址的问题,给你几个快速排查和修复的方向:

先明确你的架构场景

首先得搞清楚:你的PostgreSQL和运行pytest的环境是在同一个Docker容器里,还是两个不同的容器(同属一个docker-compose网络)?这会直接影响连接地址的选择:

场景1:PostgreSQL和pytest在同一个容器里

这种情况下报错"Cannot assign requested address",通常是PostgreSQL没开启IPv6监听,或者只监听了Unix socket,而pytest默认尝试用IPv6连接localhost(也就是::1)。

快速修复步骤:

  • 先进入容器:docker exec -it container_name bash
  • 找到PostgreSQL的配置文件(一般在/var/lib/postgresql/data/postgresql.conf),把listen_addresses参数改成'*'(允许监听所有IPv4和IPv6地址)
  • 同时确认配置里ipv6 = on(开启IPv6支持)
  • 重启PostgreSQL服务:pg_ctl restart -D /var/lib/postgresql/data
  • 也可以临时应急:把pytest的数据库连接地址从localhost改成127.0.0.1(强制用IPv4连接,不用改配置就能快速验证问题)

场景2:PostgreSQL和pytest在不同容器里(同docker-compose网络)

这时候绝对不能用localhost作为连接地址!因为容器里的localhost只指向当前容器本身,根本找不到PostgreSQL容器。

快速修复:

  • 把pytest的数据库连接字符串里的localhost,换成docker-compose.yml里PostgreSQL服务的名称(比如你services块里定义的postgres),比如连接串改成:postgresql://username:password@postgres:5432/dbname
  • 确保两个容器在同一个Docker网络里(docker-compose默认会创建专属网络,只要是同一个compose文件里的服务就没问题)

额外排查点

如果上面的方法没用,再检查这两个地方:

  • 查看pg_hba.conf配置(和postgresql.conf同目录),确保有允许本地连接的规则,比如:
    host    all             all             127.0.0.1/32            scram-sha-256
    host    all             all             ::1/128                 scram-sha-256
    
  • 在容器里手动测试连接:psql -h localhost -U your_user -d your_db,如果报错就换成psql -h 127.0.0.1 ...,看是不是IPv6的问题,这样能快速定位是Postgres配置还是pytest代码的问题

备注:内容来源于stack exchange,提问作者Prashant kamble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:20:29