EDIT - 23 Tem 2015'den beri
Resmi postgres liman işçisi görüntü çalışacak .sql
komut dosyalarını bulunan /docker-entrypoint-initdb.d/
klasörde.
Tek ihtiyacınız olan aşağıdaki sql betiğini oluşturmak:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
ve Dockerfile'ınıza ekleyin:
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Ancak 8 Temmuz 2015'ten bu yana, ihtiyacınız olan tek şey bir kullanıcı ve veritabanı oluşturmaksaPOSTGRES_USER
, POSTGRES_PASSWORD
ve POSTGRES_DB
ortam değişkenlerini kullanmak daha kolaydır :
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
veya bir Dockerfile ile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
23 Tem 2015'ten eski resimler için
Gönderen postgres Docker görüntünün belgelerinde , bu söylenir
[...] /docker-entrypoint-initdb.d
hizmeti başlatmadan önce daha fazla başlatma yapmak için bu dizinde [ ] bulunan herhangi bir * .sh betiğini kaynaklayacaktır
Burada önemli olan "hizmete başlamadan önce" . Bu, make_db.sh betiğinizin postgres hizmetinin başlatılmasından önce yürütüleceği ve bu nedenle "veritabanı postgresine bağlanamadı" hata iletisinin gerçekleştirileceği anlamına gelir .
Bundan sonra başka bir yararlı bilgi var:
Başlatma işleminizin bir parçası olarak SQL komutlarını yürütmeniz gerekirse, Postgres tek kullanıcı modunun kullanılması önemle tavsiye edilir.
Bunun ilk bakışta biraz gizemli olabileceğini kabul etti. Söylediği şey, başlatma komut dosyanızın eylemlerini gerçekleştirmeden önce postgres hizmetini tek bir modda başlatmasıdır. Böylece make_db.ksh betiğinizi aşağıdaki gibi değiştirebilirsiniz ve sizi istediğiniz şeye yakınlaştırmalıdır:
NOT , bu son taahhütte son zamanlarda değişmiştir . Bu, en son değişiklikle çalışır:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Önceden, --single
modun kullanılması gerekiyordu:
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