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

GitLab CI中PostgreSQL服务启动失败的问题求助

GitLab CI中Laravel应用PostgreSQL服务启动失败的解决方案

第一个问题:添加listen_addresses='*'后PostgreSQL启动失败

解决办法

修改PostgreSQL服务的command配置,去掉listen_addresses值的单引号:

services:
  - redis
  - name: postgres:14.7
    command: ["postgres", "-c", "listen_addresses=*"]

报错原因

你原来的配置里listen_addresses='*'包含了单引号,PostgreSQL会把'*'(连单引号一起)当作要监听的主机名,而不是通配符,导致无法解析这个“主机名”,进而无法创建TCP套接字,服务启动失败。去掉单引号后,*才会被识别为监听所有地址的通配符。

第二个问题:移除command配置后出现host.docker.internal无法解析

解决办法

在GitLab CI的variables中明确设置Laravel数据库的主机地址为PostgreSQL服务的名称postgres,同时确保租户数据库的配置也使用这个主机:

variables:
  POSTGRES_DB: landlord_test
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: postgres
  POSTGRES_HOST_AUTH_METHOD: trust
  REDIS_HOST: redis
  REDIS_PORT: 6379
  # 新增Laravel数据库连接配置
  DB_CONNECTION: pgsql
  DB_HOST: postgres
  DB_PORT: 5432
  DB_DATABASE: landlord_test
  DB_USERNAME: postgres
  DB_PASSWORD: postgres
  # 租户数据库主机配置(根据你的实际变量名调整)
  TENANT_DB_HOST: postgres

报错原因

GitLab CI中,作业容器和服务容器通过Docker网络互通,服务的主机名就是你在services里定义的名称(这里是postgres)。Laravel默认可能尝试使用host.docker.internal连接数据库,但这个主机名在GitLab CI的容器环境中不存在,所以必须手动指定正确的数据库主机为postgres。

修正后的完整gitlab-ci.yml片段

Tests:
  stage: Tests
  rules:
    - when: always
  image:
    name: php:8.3.9
  services:
    - redis
    - name: postgres:14.7
      command: ["postgres", "-c", "listen_addresses=*"]
  variables:
    POSTGRES_DB: landlord_test
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: postgres
    POSTGRES_HOST_AUTH_METHOD: trust
    REDIS_HOST: redis
    REDIS_PORT: 6379
    DB_CONNECTION: pgsql
    DB_HOST: postgres
    DB_PORT: 5432
    DB_DATABASE: landlord_test
    DB_USERNAME: postgres
    DB_PASSWORD: postgres
    TENANT_DB_HOST: postgres
  script:
    - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
    - source ~/.nvm/nvm.sh
    - nvm install 16 && nvm use 16
    - chmod +x ./pipelines-config-build.sh
    - ./pipelines-config-build.sh
    - php artisan passport:keys
    - chmod 660 storage/oauth-private.key storage/oauth-public.key
    - php artisan migrate:fresh --path=database/migrations/landlord --database=landlord --seed
    - php artisan tenants:artisan "migrate:fresh --database=tenant --seed"
#    - ./vendor/bin/pest -d memory_limit=-1 --configuration phpunit.xml tests/ --compact --coverage
    - ./pipelines-e2e-test-frontend.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:46:18