O pipeline do CI / CD com PostgreSQL falhou com o erro "O banco de dados não foi inicializado e a senha do superusuário não foi especificada"

18

Estou usando o pipeline de Bitbucket com o PosgreSQL para CI / CD. De acordo com esta documentação, o serviço PostgreSQL foi descrito bitbucket-pipelines.ymldesta maneira:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine

Funcionou muito bem até agora. Mas todos os meus pipelines mais recentes falharam com o seguinte erro:

   Error: Database is uninitialized and superuser password is not specified.
   You must specify POSTGRES_PASSWORD for the superuser. Use
   "-e POSTGRES_PASSWORD=password" to set it in "docker run".

   You may also use POSTGRES_HOST_AUTH_METHOD=trust to allow all connections
   without a password. This is *not* recommended. See PostgreSQL
   documentation about "trust":
   https://www.postgresql.org/docs/current/auth-trust.html

Como posso corrigir isso? Não houve alterações no bitbucket-pipelines.ymlarquivo, o que poderia ser o motivo desse erro.

neverwalkaloner
fonte

Respostas:

17

Parece que o motivo são as atualizações da imagem do Docker ( problema do github ). As versões mais recentes não permitem conectar-se ao banco de dados sem uma senha de qualquer lugar. Então você precisa especificar nome de usuário / senha:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
         POSTGRES_DB: pipelines
         POSTGRES_USER: test_user
         POSTGRES_PASSWORD: test_user_password

Ou, se você ainda não quiser usar a senha, basta definir POSTGRES_HOST_AUTH_METHOD=trusta variável de ambiente:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
        POSTGRES_HOST_AUTH_METHOD: trust
neverwalkaloner
fonte
4

Esta é uma mudança muito recente, há cerca de uma semana. Uma maneira de evitá-lo é codificar sua versão do postgres para a mais recente, por exemplo, mudar para postgres:9.5.18oupostgres:9.5.20-alpine

Outra maneira é passar uma senha falsa:

services:
  db:
    image: postgres
    ports:
      - "8001:5432"
    environment:
      - POSTGRES_PASSWORD=fake_password

Veja a discussão aqui: https://github.com/docker-library/postgres/issues/681

ehacinom
fonte
1

Se você está tendo problemas para conectar o Django ao PostgreSQL via Docker pela primeira vez, adicione-o POSTGRES_HOST_AUTH_METHOD: trustao seu docker-compose.ymlarquivo:

db: image: postgres:11 environment: POSTGRES_HOST_AUTH_METHOD: trust

Isso resolve o problema de conexão para mim.

Lembre-se também de que "Isso não é recomendado. Consulte a documentação do PostgreSQL sobre" trust ": https://www.postgresql.org/docs/current/auth-trust.html "

ADRIAN R7Z
fonte
se isso NÃO É RECOMENDADO, por que sugerir? Alertar que não é recomendado é bom, mas também fornecendo por que você o sugere ou fornecendo uma solução alternativa. Definitivamente ajudará. Apenas uma opinião.
ErroCode-112 Monkey encontrado em 18/02
Uma boa solução para isso é especificar um POSTGRES_PASSWORD para o superusuário. Você pode usar "-e POSTGRES_PASSWORD = password" para configurá-lo em "docker run"
ADRIAN R7Z