ไปป์ไลน์ CI / CD ที่มี PostgreSQL ล้มเหลวด้วยข้อผิดพลาด“ ฐานข้อมูลไม่ได้กำหนดค่าเริ่มต้นและไม่ได้ระบุรหัสผ่านของผู้ใช้ระดับสูง”


18

ฉันใช้ Bitbucket ไพพ์ไลน์กับ PosgreSQL สำหรับ CI / CD ตามที่อธิบายไว้ในเอกสารนี้บริการ PostgreSQL ได้รับการอธิบายในbitbucket-pipelines.ymlลักษณะนี้:

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

มันใช้งานได้ดีจนถึงตอนนี้ แต่ท่อส่งล่าสุดทั้งหมดของฉันล้มเหลวโดยมีข้อผิดพลาดดังต่อไปนี้:

   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

ฉันจะแก้ไขได้อย่างไร ไม่มีการเปลี่ยนแปลงในbitbucket-pipelines.ymlไฟล์ซึ่งอาจเป็นสาเหตุของข้อผิดพลาดดังกล่าว ..

คำตอบ:


17

ดูเหมือนว่าเหตุผลคือการอัปเดตรูปภาพของนักเทียบท่า ( ปัญหา github ) เวอร์ชันล่าสุดไม่อนุญาตให้เชื่อมต่อกับฐานข้อมูลโดยไม่ต้องใช้รหัสผ่านจากที่ใดก็ได้ ดังนั้นคุณต้องระบุชื่อผู้ใช้ / รหัสผ่าน:

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

หรือถ้าคุณยังไม่ต้องการใช้รหัสผ่านคุณสามารถตั้งค่าPOSTGRES_HOST_AUTH_METHOD=trustตัวแปรสภาพแวดล้อมได้:

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

4

นี่คือการเปลี่ยนแปลงล่าสุดเมื่อประมาณหนึ่งสัปดาห์ที่ผ่านมา วิธีหนึ่งในการหลีกเลี่ยงคือการ hardcode เวอร์ชัน postgres ของคุณให้ไม่ใช่เวอร์ชันล่าสุดเช่นเปลี่ยนเป็นpostgres:9.5.18หรือpostgres:9.5.20-alpine

อีกวิธีคือส่งรหัสผ่านปลอม:

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

ดูการสนทนาได้ที่นี่: https://github.com/docker-library/postgres/issues/681


1

หากคุณมีปัญหาในการเชื่อมต่อ Django กับ PostgreSQL ผ่าน Docker เป็นครั้งแรกจากนั้นเพิ่มไฟล์POSTGRES_HOST_AUTH_METHOD: trustของคุณdocker-compose.yml:

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

วิธีนี้แก้ปัญหาการเชื่อมต่อสำหรับฉัน

โปรดทราบว่า " ไม่แนะนำให้ดูที่เอกสารประกอบ PostgreSQL เกี่ยวกับ" ความเชื่อถือ ": https://www.postgresql.org/docs/current/auth-trust.html "


หากไม่แนะนำให้ทำเช่นนี้ทำไมแนะนำ การแจ้งเตือนว่าไม่แนะนำเป็นสิ่งที่ดี แต่ยังให้เหตุผลว่าทำไมคุณแนะนำหรือให้การแก้ไขมากกว่า จะช่วยได้แน่นอน เพียงความเห็น
ErroCode-112 Monkey พบ

การทำงานที่ดีในเรื่องนี้คือการระบุ POSTGRES_PASSWORD สำหรับ superuser คุณสามารถใช้ "-e POSTGRES_PASSWORD = รหัสผ่าน" เพื่อตั้งค่าใน "รันนักเทียบท่า"
ADRIAN R7Z
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.