CI / CD-Pipeline mit PostgreSQL fehlgeschlagen mit dem Fehler "Datenbank ist nicht initialisiert und Superuser-Passwort wurde nicht angegeben"

18

Ich verwende die Bitbucket-Pipeline mit PosgreSQL für CI / CD. Gemäß dieser Dokumentation wurde der PostgreSQL-Dienst folgendermaßen beschrieben bitbucket-pipelines.yml:

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

Bis jetzt hat es gut funktioniert. Alle meine neuesten Pipelines sind jedoch mit folgendem Fehler fehlgeschlagen:

   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

Wie kann ich es reparieren? Es gab keine Änderungen in der bitbucket-pipelines.ymlDatei, die der Grund für einen solchen Fehler sein könnten.

Neverwalkaloner
quelle

Antworten:

17

Der Grund dafür sind anscheinend die Updates des Docker-Images (Github- Problem ). Neueste Versionen erlauben keine Verbindung zu DB ohne Passwort von irgendwoher. Sie müssen also Benutzername / Passwort angeben:

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

Wenn Sie das Kennwort immer noch nicht verwenden möchten, können Sie einfach die POSTGRES_HOST_AUTH_METHOD=trustUmgebungsvariable festlegen :

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
        POSTGRES_HOST_AUTH_METHOD: trust
Neverwalkaloner
quelle
4

Dies ist eine sehr neue Änderung seit ungefähr einer Woche. Eine Möglichkeit, dies zu vermeiden, besteht darin, Ihre Postgres-Version nicht auf den neuesten Stand zu bringen, z. B. auf postgres:9.5.18oder zu ändernpostgres:9.5.20-alpine

Eine andere Möglichkeit besteht darin, ein falsches Passwort zu übergeben:

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

Siehe die Diskussion hier: https://github.com/docker-library/postgres/issues/681

ehacinom
quelle
1

Wenn Sie Probleme haben, Django zum ersten Mal über Docker mit PostgreSQL zu verbinden, fügen POSTGRES_HOST_AUTH_METHOD: trustSie docker-compose.ymlFolgendes zu Ihrer Datei hinzu:

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

Dies löst das Verbindungsproblem für mich.

Bitte beachten Sie auch, dass "dies nicht empfohlen wird. Siehe PostgreSQL-Dokumentation zu" Vertrauen ": https://www.postgresql.org/docs/current/auth-trust.html ".

ADRIAN R7Z
quelle
Wenn dies nicht empfohlen wird, warum sollten Sie es vorschlagen? Es ist gut, darauf hinzuweisen, dass es nicht empfohlen wird, aber auch anzugeben, warum Sie es vorschlagen, oder eine Lösung dafür bereitzustellen. Wird auf jeden Fall helfen. Nur eine Meinung.
ErroCode-112-Affe gefunden
Eine gute Lösung hierfür ist die Angabe eines POSTGRES_PASSWORD für den Superuser. Sie können "-e POSTGRES_PASSWORD = password" verwenden, um es in "Docker Run"
ADRIAN R7Z