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

Jenkins slave环境下docker-compose运行无法连接postgres数据库问题求助

故障根因

你遇到的问题核心是depends_on配置的特性限制:它仅保证postgres容器进入running状态,不会等待容器内的数据库进程完成初始化、具备对外服务能力。本地环境资源充足时postgres初始化速度快,test服务启动时数据库已经就绪,因此运行正常;Jenkins slave节点通常资源分配更少,postgres初始化耗时更长,pytest启动时数据库还未完成启动,就会抛出连接拒绝报错。
你新增的端口暴露配置没有作用,因为同一docker-compose创建的内部网桥下,容器间通信不需要映射宿主机端口,端口映射仅用于宿主机/外部网络访问postgres服务。

排查步骤
  • 查看postgres容器运行日志,确认初始化进度:在Jenkins任务的docker-compose命令执行后新增docker logs $(docker-compose -f tests/integration/docker-compose.yml ps -q postgres_db),检查是否输出database system is ready to accept connections日志,如果未输出该日志即可确认是数据库未就绪导致的问题。
  • 确认容器网络归属:分别执行docker inspect 你的postgres容器ID | grep Networks、docker inspect 你的test服务容器ID | grep Networks,确认两个容器归属同一网桥,排除网络隔离问题。
  • 手动验证连通性:进入test服务容器执行nc -zv postgres_db 5432,如果连通失败则为数据库未就绪/网络问题,连通成功则为代码侧连接逻辑无重试导致的问题。
解决方案

方案1:配置健康检查(推荐)

修改docker-compose.yml,给postgres服务新增健康检查逻辑,同时配置test服务等待postgres健康后再启动,修改后的配置如下:

version: "3.4"
services:
  test:
    build:
      context: ../..
      dockerfile: Dockerfile
    depends_on:
      postgres_db:
        condition: service_healthy
    environment:
      PG_UNITTEST_DB: "postgresql://testuser:testpassword@postgres_db/testdb"
    command: pytest tests/integration
  postgres_db:
    image:  postgis/postgis
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: testpassword
      POSTGRES_USER: testuser
      POSTGRES_DB: testdb
    # 新增健康检查配置
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U testuser -d testdb"]
      interval: 2s
      timeout: 5s
      retries: 10

该方案无需修改业务代码或镜像内容,仅靠compose配置即可适配不同环境的启动速度差异。

方案2:启动前增加等待逻辑

如果不想修改compose配置,可以在test服务的启动命令前增加等待逻辑:

  • 提前将常用的端口等待脚本打入镜像,将test的command修改为./wait-for-it.sh postgres_db:5432 -- pytest tests/integration
  • 临时方案可以直接加sleep延迟启动:command: bash -c "sleep 15 && pytest tests/integration",缺点是延迟时间无法动态适配不同环境的启动速度。

方案3:代码侧增加连接重试

在pytest的公共fixture(通常为conftest.py)中新增数据库连接重试逻辑,连接失败时间隔2秒重试,最多重试10次即可解决该问题。

内容的提问来源于stack exchange,提问作者user1298426

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:51:02