Potok CI / CD z PostgreSQL nie powiódł się z powodu błędu „Baza danych nie została zainicjowana i hasło administratora nie zostało określone”

18

Używam potoku Bitbucket z PosgreSQL dla CI / CD. Zgodnie z tą dokumentacją usługa PostgreSQL została opisana w bitbucket-pipelines.ymlnastępujący sposób:

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

Do tej pory działało dobrze. Ale wszystkie moje najnowsze potoki nie powiodły się z następującym błędem:

   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

Jak mogę to naprawić? W bitbucket-pipelines.ymlpliku nie było żadnych zmian , które mogłyby być przyczyną takiego błędu.

neverwalkaloner
źródło

Odpowiedzi:

17

Wygląda na to, że powodem są aktualizacje obrazu dokera ( problem z github ). Najnowsze wersje nie pozwalają na połączenie z DB bez hasła z dowolnego miejsca. Musisz więc podać nazwę użytkownika / hasło:

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

Lub jeśli nadal nie chcesz używać hasła, możesz po prostu ustawić POSTGRES_HOST_AUTH_METHOD=trust zmienną środowiskową:

definitions:
  services:
    postgres:
      image: postgres:9.6-alpine
      environment:
        POSTGRES_HOST_AUTH_METHOD: trust
neverwalkaloner
źródło
4

Jest to bardzo niedawna zmiana sprzed około tygodnia. Jednym ze sposobów, aby tego uniknąć, jest zaszyfrowanie wersji postgres do najnowszej, np. Zmiana na postgres:9.5.18lubpostgres:9.5.20-alpine

Innym sposobem jest podanie fałszywego hasła:

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

Zobacz dyskusję tutaj: https://github.com/docker-library/postgres/issues/681

ehacinom
źródło
1

Jeśli masz problemy z połączeniem Django z PostgreSQL przez Docker po raz pierwszy, dodaj plik POSTGRES_HOST_AUTH_METHOD: trustdo swojego docker-compose.ymlpliku:

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

To rozwiązuje problem połączenia dla mnie.

Należy również pamiętać, że „Nie jest to zalecane. Zobacz dokumentację PostgreSQL na temat„ zaufania ”: https://www.postgresql.org/docs/current/auth-trust.html

ADRIAN R7Z
źródło
jeśli NIE JEST ZALECANE, to po co to sugerować? Ostrzeganie, że nie jest to zalecane, jest dobre, ale także podawanie powodów, dla których to sugerujesz, lub omawianie tego. Na pewno pomoże. Tylko opinia.
ErroCode-112 Monkey Znaleziono
Dobrym rozwiązaniem tego problemu jest określenie POSTGRES_PASSWORD dla administratora. Możesz użyć „-e POSTGRES_PASSWORD = hasło”, aby ustawić je w „uruchomieniu
dokera