PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come creare un utente/database nello script per Docker Postgres

MODIFICA - dal 23 luglio 2015

L'immagine della finestra mobile di Postgres ufficiale eseguirà .sql script trovati in /docker-entrypoint-initdb.d/ cartella.

Quindi tutto ciò che serve è creare il seguente script sql:

init.sql

CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;

e aggiungilo nel tuo Dockerfile:

File Docker

FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/

Ma dall'8 luglio 2015, se tutto ciò di cui hai bisogno è creare un utente e un database , è più semplice utilizzare il POSTGRES_USER , POSTGRES_PASSWORD e POSTGRES_DB variabili di ambiente:

docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres

o con un Dockerfile:

FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker

per le immagini precedenti al 23 luglio 2015

Dalla documentazione dell'immagine Docker postgres, si dice che

[...] genererà qualsiasi script *.sh trovato in quella directory [/docker-entrypoint-initdb.d ] per eseguire un'ulteriore inizializzazione prima di avviare il servizio

L'importante qui è "prima di iniziare il servizio" . Ciò significa che il tuo script make_db.sh verrà eseguito prima dell'avvio del servizio postgres, da qui il messaggio di errore "Impossibile connettersi al database postgres" .

Dopo di che c'è un'altra informazione utile:

Se devi eseguire comandi SQL come parte della tua inizializzazione, l'uso della modalità utente singolo di Postgres è altamente raccomandato.

D'accordo, questo può essere un po' misterioso a prima vista. Quello che dice è che il tuo script di inizializzazione dovrebbe avviare il servizio postgres in modalità singola prima di eseguire le sue azioni. Quindi potresti cambiare il tuo make_db.ksh script come segue e dovrebbe avvicinarti a ciò che desideri:

NOTA , questo è cambiato di recente nel seguente commit. Funzionerà con l'ultima modifica:

export PGUSER=postgres
psql <<- EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL

In precedenza, l'uso di --single era richiesta la modalità:

gosu postgres postgres --single <<- EOSQL
    CREATE USER docker;
    CREATE DATABASE docker;
    GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL