แก้ไข - ตั้งแต่ 23 กรกฎาคม 2015
อย่างเป็นทางการภาพ postgres นักเทียบท่าจะทำงาน.sql
สคริปต์ที่พบใน/docker-entrypoint-initdb.d/
โฟลเดอร์
ดังนั้นสิ่งที่คุณต้องการคือการสร้างสคริปต์ sql ต่อไปนี้:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
และเพิ่มใน Dockerfile ของคุณ:
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
แต่ตั้งแต่ 8 กรกฎาคม 2015, ถ้าทั้งหมดที่คุณต้องการก็คือการสร้างผู้ใช้และฐานข้อมูลมันเป็นเรื่องง่ายที่จะทำให้การใช้งานเพียงแค่ไปPOSTGRES_USER
, POSTGRES_PASSWORD
และPOSTGRES_DB
ตัวแปรสภาพแวดล้อม:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
หรือกับ Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
สำหรับรูปภาพที่เก่ากว่า 23 กรกฎาคม 2015
จากเอกสารของอิมเมจ Docker postgresได้มีการกล่าวไว้ว่า
[... ] มันจะแหล่งสคริปต์ * .sh ใด ๆ ที่พบในไดเรกทอรีนั้น [ /docker-entrypoint-initdb.d
] เพื่อทำการเริ่มต้นต่อไปก่อนที่จะเริ่มบริการ
สิ่งที่สำคัญที่นี่คือ"ก่อนที่จะเริ่มให้บริการ" ซึ่งหมายความว่าสคริปต์ของคุณmake_db.shจะถูกดำเนินการก่อนที่จะบริการ Postgres จะเริ่มต้นจึงเกิดข้อผิดพลาด"ไม่สามารถเชื่อมต่อกับฐานข้อมูล Postgres"
หลังจากนั้นมีข้อมูลที่เป็นประโยชน์อีกชิ้นหนึ่ง:
หากคุณต้องการดำเนินการคำสั่ง SQL เป็นส่วนหนึ่งของการเริ่มต้นของคุณแนะนำให้ใช้โหมดผู้ใช้คนเดียวของ Postgres
ตกลงนี้อาจเป็นบิตลึกลับที่ดูครั้งแรก สิ่งที่กล่าวคือสคริปต์การเริ่มต้นของคุณควรเริ่มบริการ postgres ในโหมดเดียวก่อนที่จะดำเนินการ ดังนั้นคุณสามารถเปลี่ยนสคริปต์make_db.kshของคุณดังต่อไปนี้และควรทำให้คุณใกล้ชิดกับสิ่งที่คุณต้องการ:
หมายเหตุนี้มีการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้ในต่อไปกระทำ สิ่งนี้จะทำงานกับการเปลี่ยนแปลงล่าสุด:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
ก่อนหน้านี้--single
จำเป็นต้องใช้โหมด:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
gosu postgres postgres --single < /tmp/somefile.sql