【GitHub Actions】could not translate host name "XXX" to address

2024/03/27に公開

前提

GitHub Actionsの勉強中に下記のようなジョブを定義していました

rails.yml
    - name: Setup database
      env:
        RAILS_ENV: test
        PGHOST: localhost
        PGUSER: postgres
        PGPASSWORD: password
      run: |
        bin/rails db:create
        bin/rails db:schema:load
rails.yml(全部)
rails.yml
name: Rails CI
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:12
        env:
          POSTGRES_PASSWORD: password
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
    - uses: actions/checkout@v3
    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: 3.2.1
        bundler-cache: true
    - name: Set up Node
      uses: actions/setup-node@v2
      with:
        node-version: 14
        cache: 'yarn'
    - name: Install yarn
      run: yarn install
    - name: Setup database
      env:
        RAILS_ENV: test
        PGHOST: localhost
        PGUSER: postgres
        PGPASSWORD: password
      run: |
        bin/rails db:create
        bin/rails db:schema:load
    - name: Run tests
      env:
        RAILS_ENV: test
        PGHOST: localhost
        PGUSER: postgres
        PGPASSWORD: password
      run: bin/rails test

ホスト名であるdbが名前解決出来ないというエラーに遭遇しました

could not translate host name "db" to address: Temporary failure in name resolution

データベースは下記のように定義していました。ローカルでデータベースとRailsの疎通は確認済みでした。

database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

原因

host: dbで定義してしまっていたためでした。下記に公式の説明を掲載します。つまりは、ホスト名は全て
 localhost:<port>または127.0.0.1:<port> にバインドされている状態ということでした。

ランナー マシンでジョブを直接実行する場合は、localhost:<port>または を使用してサービス コンテナにアクセスできます127.0.0.1:<port>。GitHub は、サービス コンテナから Docker ホストへの通信を可能にするようにコンテナ ネットワークを構成します。

https://docs.github.com/en/actions/using-containerized-services/about-service-containers

なので下記のように修正します

database.yml
test:
  <<: *default
  database: myapp_test
+ host : localhost

これで正常に名前解決できるようになりました!

Discussion