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