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

GitLab CI流水线运行失败,Django无法连接PostgreSQL服务如何解决?

GitLab CI PostgreSQL连接失败修复方案

问题根因

你当前的报错是因为Django默认尝试访问构建容器本地的PostgreSQL服务,但GitLab CI中配置的postgres:latest服务是运行在独立容器中的,和你的Python构建容器是分开的,所以构建容器本地不存在PostgreSQL的Unix套接字文件,也没有本地运行的PostgreSQL进程。

修复步骤

第一步:完善CI配置的环境变量

PostgreSQL容器启动需要配置用户名、密码参数,缺失会导致服务启动异常,修改你.gitlab-ci.yml的variables区块如下:

variables:
  POSTGRES_DB: projectdb
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: postgres
  # 若你的项目支持读取DATABASE_URL环境变量(如使用dj-database-url),可直接加这行无需修改项目代码
  DATABASE_URL: "postgres://postgres:postgres@postgres:5432/projectdb"

第二步:调整Django数据库配置

修改项目settings.py中的数据库连接配置,将HOST参数从空值/localhost改为postgres(GitLab CI中服务容器的默认主机名就是服务名本身),端口填5432,用户名密码和上一步配置的保持一致即可:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'projectdb',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'postgres',
        'PORT': '5432',
    }
}

第三步:可选添加服务等待逻辑

如果修改后仍偶现连接失败,是因为PostgreSQL服务启动需要时间,migrate命令执行时服务还没完全就绪,可以在script的migrate命令前添加等待逻辑:

build:
  stage: build
  script:
  - pip install -r requirements.txt
  # 新增以下两行等待PostgreSQL启动
  - apt-get update && apt-get install -y netcat
  - until nc -z postgres 5432; do echo "等待PostgreSQL就绪..."; sleep 1; done
  - python manage.py migrate
  only:
    - EC-30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:45:03