Pipeline CI / CD con PostgreSQL non riuscita con errore "Database non inizializzato e password superutente non specificata"


18

Sto usando la pipeline Bitbucket con PosgreSQL per CI / CD. Secondo questa documentazione il servizio PostgreSQL è stato descritto in bitbucket-pipelines.ymlquesto modo:

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

Ha funzionato bene fino ad ora. Ma tutte le mie ultime pipeline sono fallite con il seguente errore:

   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

Come posso ripararlo? Non sono state apportate modifiche al bitbucket-pipelines.ymlfile che potrebbero essere la ragione di tale errore.

Risposte:


17

Sembra che il motivo siano gli aggiornamenti dell'immagine docker ( problema github ). Le ultime versioni non consentono di connettersi al DB senza password da nessuna parte. Quindi è necessario specificare nome utente / password:

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

O se ancora non vuoi usare la password, puoi semplicemente impostare POSTGRES_HOST_AUTH_METHOD=trustla variabile d'ambiente:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
        POSTGRES_HOST_AUTH_METHOD: trust

4

Questa è una modifica molto recente, circa una settimana fa. Un modo per evitarlo è codificare la versione di Postgres in modo che non sia la più recente, ad esempio passando a postgres:9.5.18opostgres:9.5.20-alpine

Un altro modo è passare una password falsa:

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

Vedi la discussione qui: https://github.com/docker-library/postgres/issues/681


1

Se riscontri problemi di connessione di Django a PostgreSQL tramite Docker per la prima volta, aggiungi il POSTGRES_HOST_AUTH_METHOD: trusttuo docker-compose.ymlfile:

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

Questo risolve il problema di connessione per me.

Si noti inoltre che "Questo non è raccomandato. Vedere la documentazione PostgreSQL sul" trust ": https://www.postgresql.org/docs/current/auth-trust.html "


se questo NON È RACCOMANDATO, perché suggerirlo? Avvisare che non è raccomandato è buono, ma anche fornire il motivo per cui lo suggerisci o fornire un lavoro su di esso. Aiuterà sicuramente. Solo un'opinione.
Scimmia ErroCode-112 trovata il

Una buona soluzione a questo proposito è specificare un POSTGRES_PASSWORD per il superutente. Puoi usare "-e POSTGRES_PASSWORD = password" per impostarlo in "docker run"
ADRIAN R7Z,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.