คุณต้องต่อจิ๊กซอว์สองชิ้นที่นี่:
https://www.postgresql.org/docs/9.5/app-initdb.html
initdb สอนวิธีส่งผ่านข้อมูลการเข้ารหัสไปยังฟังก์ชันสร้างฐานข้อมูล
ภาพ Docker อย่างเป็นทางการของ postgres ระบุว่าคุณสามารถส่งตัวเลือกไปที่ initdb:
https://hub.docker.com/_/postgres
Ergo คำตอบจะเป็นดังนี้:
ฐานข้อมูล:
ภาพ: postgres: ล่าสุด
ปริมาณ:
- db:/var/lib/postgresql/data
สิ่งแวดล้อม:
POSTGRES_PASSWORD: ทดสอบ
POSTGRES_INITDB_ARGS: '--encoding=UTF-8 --lc-collate=C --lc-ctype=C'
หรือข้อโต้แย้งที่คล้ายกัน. ฉันละเว้นตัวเลือก lang เนื่องจากนี่ไม่ใช่ตัวเลือก "ส่งการตั้งค่าสถานะนี้ไปยัง postgres" อย่างเป็นทางการในหน้าคน (ลิงก์แรกที่ฉันรวมไว้)
การทดสอบของฉันไม่ได้รันสิ่งนี้โดยใช้การเขียนนักเทียบท่า แต่อยู่ในบรรทัดคำสั่งโดยใช้ตัวเลือก -e นี่เป็นแนวคิดเดียวกันทุกประการ "สภาพแวดล้อม" ในการเขียนนักเทียบท่าคือ -e ในบรรทัดคำสั่ง เพื่อปัญญา:
https://docs.docker.com/engine/reference/commandline/run/
--env , -e ตั้งค่าตัวแปรสภาพแวดล้อม
ทดสอบ #1 ด้วยชุดรหัสผ่าน env เท่านั้น:
นักเทียบท่ารัน -e POSTGRES_PASSWORD=ทดสอบ postgres:latest
นี่คือผลลัพธ์ของการเรียกใช้เริ่มต้น:
postgres@cbf23636dabc:~$ psql
psql (13.4 (เดเบียน 13.4-1.pgdg100+1))
พิมพ์ "ความช่วยเหลือ" เพื่อขอความช่วยเหลือ
โพสเกรส=# \l
รายชื่อฐานข้อมูล
ชื่อ | เจ้าของ | การเข้ารหัส | เรียงหน้า | Cประเภท | สิทธิ์การเข้าถึง
-----------+----------+--------+------------+--- ---------+------------------------
โพสต์เกรส | โพสต์เกรส | UTF8 | en_US.utf8 | en_US.utf8 |
แม่แบบ0 | โพสต์เกรส | UTF8 | en_US.utf8 | en_US.utf8 | =c/โพสเกรส +
| | | | | postgres=CTc/โพสต์เกรส
แม่แบบ1 | โพสต์เกรส | UTF8 | en_US.utf8 | en_US.utf8 | =c/โพสเกรส +
| | | | | postgres=CTc/โพสต์เกรส
ทดสอบ #2 โดยตั้งค่าตัวแปรสภาพแวดล้อมตามด้านบนในนักเทียบท่าที่แนะนำซึ่งเขียนบน CLI เท่านั้น:
นักเทียบท่าเรียกใช้ -e POSTGRES_PASSWORD=test -e POSTGRES_INITDB_ARGS='--encoding=UTF-8 --lc-collate=C --lc-ctype=C' postgres:latest
จากนั้นผลลัพธ์:
postgres@b6b80c876f3e:~$ psql
psql (13.4 (เดเบียน 13.4-1.pgdg100+1))
พิมพ์ "ความช่วยเหลือ" เพื่อขอความช่วยเหลือ
โพสเกรส=# \l
รายชื่อฐานข้อมูล
ชื่อ | เจ้าของ | การเข้ารหัส | เรียงหน้า | Cประเภท | สิทธิ์การเข้าถึง
-----------+----------+---------+---------+------ -+----------------------
โพสต์เกรส | โพสต์เกรส | UTF8 | ค | ค |
แม่แบบ0 | โพสต์เกรส | UTF8 | ค | ค | =c/โพสเกรส +
| | | | | postgres=CTc/โพสต์เกรส
แม่แบบ1 | โพสต์เกรส | UTF8 | ค | ค | =c/โพสเกรส +
| | | | | postgres=CTc/โพสต์เกรส
โปรดสังเกตส่วนในหน้าอิมเมจ Postgresql Docker อย่างเป็นทางการ ซึ่งจะอธิบายสคริปต์การเริ่มต้น นี่คือสิ่งที่คุณอาจพิจารณาเช่นกัน