O erro do gitlab ci não pôde traduzir o nome do host "postgres" para o endereço: O nome não resolve

8

Eu uso o gitlab-ci no meu aplicativo rails, ele correu corretamente até ontem, mas não passa devido a:

rake aborted!
PG::ConnectionBad: could not translate host name "postgres" to address: Name does not resolve
/usr/local/bundle/gems/pg-1.1.4/lib/pg.rb:56:in `initialize'
/usr/local/bundle/gems/pg-1.1.4/lib/pg.rb:56:in `new'
/usr/local/bundle/gems/pg-1.1.4/lib/pg.rb:56:in `connect'
....
Tasks: TOP => db:schema:load => db:check_protected_environments

.gitlab-ci.yml:

rspec:
  stage: test
  services:
    - postgres:10
  variables:
    DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/$POSTGRES_DB"
    POSTGRES_DB: db_test
    RAILS_ENV: test
  before_script:
    - ruby -v
  script:
    - cp config/application.sample.yml config/application.yml
    - cp config/database.sample.yml config/database.yml
    - bundle exec rake db:schema:load
    - bundle exec rspec spec

Parece que não é possível encontrar o serviço do postgres em execução ou, por algum motivo, o serviço de banco de dados não está funcionando corretamente, acho que alguns internos foram alterados no gitlab-ci.

Alireza mohagheghi
fonte
Experimentando o mesmo problema com o aplicativo django também. Definitivamente algo interno mudou.
Ojas Kale 15/02

Respostas:

9

EDIT: Esta foi uma alteração pretendida para as imagens, agora você deve definir uma senha ou configurar mais:

Se você sabe que deseja ser inseguro (ou seja, qualquer pessoa pode se conectar sem uma senha de qualquer lugar), então POSTGRES_HOST_AUTH_METHOD = confiança é como você escolhe isso.


Isso parece ter sido introduzido quando as imagens do docker foram atualizadas para as novas versões .

Você pode extrair a imagem 10.11 para evitar esse problema por enquanto:

services:
- postgres:10.11

Não sabemos por que isso está acontecendo, mas estamos enfrentando o mesmo desde a última atualização da imagem do Docker . Eu descobri que esse também é o caso passando de 12.1 para 12.2.

brxck
fonte
3

O postgres possui dois nomes de variáveis ​​de ambiente necessários POSTGRES_USERe, POSTGRES_PASSWORDse você não fornecer o contêiner, não será executado.

documentação do gitlab-ci sobre serviços

moe zarrinfam
fonte
1
Sua resposta também está correta, muito obrigado.
Alireza mohagheghi