在GitHub Action中无法连接PostgreSQL数据库:名称解析临时失败
解决GitHub Actions中连接PostgreSQL的"临时域名解析失败"问题
问题原因
你的测试Job运行在python:3.11-slim容器内,而定义的PostgreSQL服务容器默认和它处于隔离的网络环境,导致Python容器无法通过postgres主机名解析到数据库容器,从而抛出connection is bad: Temporary failure in name resolution错误。
解决方案
下面提供两种可行的解决方式:
方法一:通过localhost+端口映射访问(推荐)
修改工作流配置,给PostgreSQL服务添加端口映射和健康检查,同时将数据库主机地址改为localhost:
test: runs-on: ubuntu-latest container: python:3.11-slim env: POSTGRES_HOST: localhost POSTGRES_DB: test POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres services: postgres: image: postgres env: POSTGRES_PASSWORD: postgres POSTGRES_DB: test ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 needs: lint steps: - uses: actions/checkout@v3 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt alembic upgrade head - name: Run tests run: pytest
方法二:让两个容器共享同一网络
给Job容器和PostgreSQL服务容器指定同一个网络,这样就能继续使用postgres作为主机名访问:
test: runs-on: ubuntu-latest container: image: python:3.11-slim options: --network test-network env: POSTGRES_HOST: postgres POSTGRES_DB: test POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres services: postgres: image: postgres env: POSTGRES_PASSWORD: postgres POSTGRES_DB: test options: --network test-network needs: lint steps: - uses: actions/checkout@v3 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt alembic upgrade head - name: Run tests run: pytest
额外注意事项
- 必须添加PostgreSQL的健康检查配置,确保数据库完全启动后再执行迁移和测试,避免出现"数据库未就绪"的连接问题。
- 显式指定
POSTGRES_USER环境变量,和PostgreSQL容器的默认配置保持一致,避免潜在的权限问题。
内容的提问来源于stack exchange,提问作者developmentstart
相关产品推荐
相关产品推荐

