2014-10-05 10 views
5

Sto provando a creare un semplice server Postgres con finestra mobile. Io uso il postgres image ufficiale come base per il mio contenitore. mio Dockerfile contiene questi comandi:Postgres su Docker. Come posso creare un database e un utente?

FROM postgres 
USER postgres 
RUN /etc/init.d/postgresql start &&\ 
    psql --command "CREATE USER user WITH SUPERUSER PASSWORD 'user';" &&\ 
    createdb -O user app 

E quando provo a farlo funzionare ho un errore:

psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Quello che sto facendo di sbagliato?

+2

Hai controllato che "* Il server è in esecuzione localmente e accetta le connessioni sul socket di dominio Unix *"? –

risposta

2

È possibile che sia necessario del tempo prima che postgres accetti le connessioni. Il modo in cui l'hai scritto, chiamerà CREATE USER immediatamente dopo il ritorno della funzione di avvio. Prova ad addormentarti e vedi se è ancora un problema.

1

Aveva lo stesso problema in uno script nel punto di ingresso. In seguito è il mio estratto Dockerfile

# init execution 
ENTRYPOINT ["/usr/local/sbin/initpostgres.sh"] 

con i seguenti comandi all'interno del intipostgres.sh sceneggiatura

su postgres -c "pg_ctl start -l /var/lib/postgresql/logpostgres" 
su postgres -c "createuser -s $OPENERPUSER" 

aggiungendo sleep 1 prima del comando createuser per @seanmcl suggerito correzione ha funzionato per me:

su postgres -c "pg_ctl start -l /var/lib/postgresql/logpostgres" 
sleep 1 
su postgres -c "createuser -s $OPENERPUSER" 
1

Usa pg_ctl con il flag -w in modo che il comando finisca quando il server è avviato. Non dovrai più chiederci se abbiamo aspettato abbastanza a lungo. E possiamo effettivamente arrestare il server stesso modo

sudo -u postgres pg_ctl start -w -D ${PGDATA} 

sudo -u postgres psql --command "CREATE USER user WITH SUPERUSER PASSWORD 'user';" &&\ 
sudo -u postgres createdb -O user app 

sudo -u postgres pg_ctl stop -w 
1

Il problema sembra essere che il postgres socket UNIX non è sulla vostra macchina host. Puoi risolvere questo problema eseguendo il seguente comando.

docker run -p 5432:5432 --volume="/run/postgresql:/run/postgresql" -d --name postgres postgres

La parte essenziale è la bandiera --volume. Collega la cartella che include il file socket unix .s.GGSQL.5432 alla macchina host per poter essere letto da altri processi.

Questa sembra una domanda duplicata di Installing PostgreSQL within a docker container, è OP giusto?

Problemi correlati