EDIT - sejak 23 Juli 2015
Gambar buruh pelabuhan postgres resmi akan menjalankan .sql
skrip yang ditemukan di /docker-entrypoint-initdb.d/
map.
Jadi yang Anda butuhkan hanyalah membuat skrip sql berikut:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
dan tambahkan di Dockerfile Anda:
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Namun sejak 8 Juli 2015, jika yang Anda butuhkan hanyalah membuat pengguna dan database , lebih mudah menggunakan POSTGRES_USER
, POSTGRES_PASSWORD
dan POSTGRES_DB
variabel lingkungan:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
atau dengan Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
untuk gambar yang lebih lama dari 23 Juli 2015
Dari dokumentasi image Docker postgres, dikatakan bahwa
[...] itu akan mencari skrip *.sh yang ditemukan di direktori itu [
/docker-entrypoint-initdb.d
] untuk melakukan inisialisasi lebih lanjut sebelum memulai layanan
Yang penting di sini adalah "sebelum memulai layanan" . Ini berarti skrip Anda make_db.sh akan dieksekusi sebelum layanan postgres dimulai, maka pesan kesalahan "tidak dapat terhubung ke database postgres" .
Setelah itu ada informasi lain yang berguna:
Jika Anda perlu menjalankan perintah SQL sebagai bagian dari inisialisasi Anda, penggunaan mode pengguna tunggal Postgres sangat disarankan.
Setuju ini bisa sedikit misterius pada pandangan pertama. Apa yang dikatakan adalah bahwa skrip inisialisasi Anda harus memulai layanan postgres dalam mode tunggal sebelum melakukan tindakannya. Jadi Anda dapat mengubah make_db.ksh . Anda skrip sebagai berikut dan itu akan membuat Anda lebih dekat dengan apa yang Anda inginkan:
CATATAN , ini telah berubah baru-baru ini di komit berikut. Ini akan berfungsi dengan perubahan terbaru:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Sebelumnya, penggunaan --single
mode diperlukan:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL