EDIT - sejak 23 Jul 2015
Gambar poster docker resmi akan menjalankan .sql
skrip yang ditemukan di /docker-entrypoint-initdb.d/
folder.
Jadi yang Anda butuhkan adalah 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/
Tapi sejak 8 Juli 2015, jika semua yang Anda butuhkan adalah untuk membuat user dan database yang , lebih mudah untuk hanya menggunakan make ke 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 tua dari 23 Jul 2015
Dari dokumentasi gambar postgres Docker , dikatakan demikian
[...] ini akan mencari skrip * .sh yang ditemukan di direktori [ /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, oleh karena itu pesan kesalahan "tidak dapat terhubung ke database postgres" .
Setelah itu ada informasi lain yang bermanfaat:
Jika Anda perlu menjalankan perintah SQL sebagai bagian dari inisialisasi Anda, penggunaan mode pengguna tunggal Postgres sangat dianjurkan.
Setuju ini bisa sedikit misterius pada tampilan pertama. Apa yang dikatakannya adalah bahwa skrip inisialisasi Anda harus memulai layanan postgres dalam mode tunggal sebelum melakukan aksinya. Jadi Anda bisa mengubah skrip make_db.ksh Anda 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 bekerja 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
gosu postgres postgres --single < /tmp/somefile.sql