Pipa CI / CD dengan PostgreSQL gagal dengan “Basis data tidak diinisialisasi dan kata sandi pengguna super tidak ditentukan” kesalahan

18

Saya menggunakan pipa Bitbucket dengan PosgreSQL untuk CI / CD. Menurut dokumentasi ini, layanan PostgreSQL telah dijelaskan dengan bitbucket-pipelines.ymlcara ini:

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

Itu bekerja dengan baik sampai sekarang. Tetapi semua saluran pipa terbaru saya gagal dengan kesalahan berikut:

   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

Bagaimana saya bisa memperbaikinya? Tidak ada perubahan pada bitbucket-pipelines.ymlfile yang bisa menjadi alasan kesalahan tersebut ..

neverwalkaloner
sumber

Jawaban:

17

Sepertinya alasannya adalah pembaruan gambar buruh pelabuhan ( masalah github ). Versi terbaru tidak memungkinkan untuk terhubung ke DB tanpa kata sandi dari mana saja. Jadi, Anda perlu menentukan nama pengguna / kata sandi:

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

Atau jika Anda masih tidak ingin menggunakan kata sandi, Anda bisa mengatur POSTGRES_HOST_AUTH_METHOD=trustvariabel lingkungan:

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

Ini adalah perubahan yang sangat baru, sekitar seminggu yang lalu. Salah satu cara untuk menghindarinya adalah dengan meng-hardcode versi postgres Anda menjadi bukan yang terbaru, misalnya mengubah ke postgres:9.5.18ataupostgres:9.5.20-alpine

Cara lain adalah dengan memasukkan kata sandi palsu:

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

Lihat diskusi di sini: https://github.com/docker-library/postgres/issues/681

ehacinom
sumber
1

Jika Anda mengalami masalah saat menyambungkan Django ke PostgreSQL via Docker untuk pertama kalinya, tambahkan POSTGRES_HOST_AUTH_METHOD: trustke docker-compose.ymlfile Anda :

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

Ini menyelesaikan masalah koneksi untuk saya.

Perlu diketahui juga bahwa "Ini tidak dianjurkan. Lihat dokumentasi PostgreSQL tentang" kepercayaan ": https://www.postgresql.org/docs/current/auth-trust.html "

ADRIAN R7Z
sumber
jika ini TIDAK DIANJURKAN, mengapa menyarankannya? Memperingatkan bahwa itu tidak dianjurkan adalah baik, tetapi juga memberikan alasan Anda menyarankannya atau memberikan solusi untuk itu. Pasti akan membantu. Hanya sebuah Opini.
ErroCode-112 Monkey Ditemukan
Pekerjaan yang bagus untuk ini adalah menentukan POSTGRES_PASSWORD untuk superuser. Anda dapat menggunakan "-e POSTGRES_PASSWORD = kata sandi" untuk mengaturnya di "buruh pelabuhan"
ADRIAN R7Z