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.

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

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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.