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
相关产品推荐
相关产品推荐

