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

GitHub Actions配置PostgreSQL后主机名无法解析的解决方法

解决GitHub Actions中PostgreSQL服务主机名解析失败问题

针对你遇到的postgres主机名无法解析的问题,可以从以下几个方面修正配置:

1. 确保services配置层级正确

GitHub Actions的services必须定义在具体的job节点内部,而非与jobs同级。如果services放在了错误层级,服务容器不会被当前作业启动,自然无法通过主机名访问。正确结构示例:

jobs:
  your-job-name:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:latest
        # 其他服务配置

2. 移除无效的PostgreSQL环境变量

Postgres官方镜像不识别POSTGRES_PORT环境变量,容器内Postgres默认监听5432端口,无需额外设置。删除该变量避免配置干扰:

env:
  POSTGRES_DB: postgres_db
  POSTGRES_PASSWORD: postgres_password
  # 移除 POSTGRES_PORT: 5432
  POSTGRES_USER: postgres_user

3. 修正健康检查命令(可选但推荐)

由于你自定义了数据库用户和名称,默认pg_isready可能无法正确检测服务就绪状态(默认使用postgres用户和数据库),修改健康检查命令匹配你的配置:

options: >-
  --health-cmd "pg_isready -U postgres_user -d postgres_db"
  --health-interval 10s
  --health-timeout 5s
  --health-retries 5

4. 备选访问方式:使用localhost

如果上述调整后仍无法通过postgres主机名访问,可利用已配置的端口映射(5432:5432)直接使用localhost,修改测试命令:

- name: Test database connection
  run: psql -h localhost -d postgres_db -U postgres_user -c 'SELECT 1;'
  env:
    PGPASSWORD: postgres_password

完整修正后的服务配置示例

services:
  postgres:
    image: postgres:latest
    env:
      POSTGRES_DB: postgres_db
      POSTGRES_PASSWORD: postgres_password
      POSTGRES_USER: postgres_user
    ports:
      - 5432:5432
    options: >-
      --health-cmd "pg_isready -U postgres_user -d postgres_db"
      --health-interval 10s
      --health-timeout 5s
      --health-retries 5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:45:40