2015-06-11 26 views
10

Ho avviato un server Postgresql nella finestra mobile ed esposto la porta 5432 per sudo docker run -it -p 5432:5432 9c421f1a239c bash e avvio manualmente il server Postgres all'interno del contenitore finestra mobile, ma non riesco a connettermi ad esso con il comando: psql -h 172.17.0.63 -U venti. 172.17.0.63 è un IP corretto e venti è il mio nome utente pg. Ma ottenere errore:Impossibile connettersi al server Postgres nella finestra mobile

psql: could not connect to server: Connection refused 
    Is the server running on host "172.17.0.63" and accepting 
    TCP/IP connections on port 5432? 

mio pg_hba.conf si presenta così:

local all    postgres        peer 
host all all 0.0.0.0/0 trust 
local all all trust 

Connessione al server pg all'interno del contenitore funziona correttamente.

Dockerfile:

FROM ubuntu:12.04 
RUN apt-get update 

RUN apt-get install -y gcc libc-dev-bin libc6 libc6-dev libssl-dev libkrb5-dev comerr-dev 

RUN apt-get install -y postgresql-common libpq-dev postgresql-9.1-postgis --fix-missing 
RUN apt-get install -y postgresql postgresql-client 

USER postgres 

ENV PGDATA /etc/postgresql/9.1/main 
ENV LOGDIR /etc/postgresql/9.1/main/postgresql.log 

WORKDIR /usr/lib/postgresql/9.1/bin 
USER root 
RUN apt-get install -y vim 
USER postgres 
RUN sed -e '90d' -i /etc/postgresql/9.1/main/pg_hba.conf 
RUN sed -e '91d' -i /etc/postgresql/9.1/main/pg_hba.conf 

RUN echo "host all all 0.0.0.0/0 trust" >> '/etc/postgresql/9.1/main/pg_hba.conf' 
RUN echo "local all all trust" >> '/etc/postgresql/9.1/main/pg_hba.conf' 

RUN ./pg_ctl start && sleep 8 && ./createdb pg && ./createdb bloodstone \ 
    && createuser -Upostgres -s venti \ 
    && createdb -Uventi -Oventi venti 

# ENTRYPOINT ./pg_ctl start && bash -c "while true; do echo "" > /dev/null; sleep 1; done" 

VOLUME $PGDATA 
EXPOSE 5432 
+0

vi manca il -p (parametro porta prima di 5432: 5432) nel comando se non è un errore di battitura –

+0

@ChandanNayak Ci dispiace, è solo un errore di battitura ... – kxxoling

+0

è la vostra contenitore ancora in esecuzione dopo l'uscita dal contenitore in esecuzione? Perché non lo si avvia con -d parametro –

risposta

3

E 'appena un errore di configurazione, che avrei dovuto impostare pg di ascoltare indirizzi pubblici o fare un port mapping. Ho fissato questo modificando il file di configurazione pg con sed:

RUN sed -e "s/[#]\?listen_addresses = .*/listen_addresses = '*'/g" -i '/etc/postgresql/9.1/main/postgresql.conf' 

Aggiungi ad un posto adeguato nella vostra Dockerfile dovrebbe essere OK.

0

Per la risoluzione dei problemi di autenticazione di Postgres in generale, consultare il log/stderr di postgres per visualizzare i motivi dettagliati relativi al mancato funzionamento. (Vedo che il problema è risolto ma se qualcuno incontra problemi simili)

Per trovare il percorso del registro postgres: "show log_destination;" se hai un psql funzionante (ad esempio localmente nella casella del server postgres)

Vedo che il tuo è impostato su "/etc/postgresql/9.1/main/postgresql.log". È possibile connettersi al contenitore per visualizzare il registro con "finestra mobile exec -it nome contenitore nome bash".

In alternativa, se un contenitore esegue direttamente postgres, "docker attach db_container_name" visualizza i messaggi di stgrerr di postgres.

Si noti che per impostazione predefinita postgres dell'utente non ha una password e utilizza solo l'autenticazione ident.

0

Ho anche affrontato un problema simile. Prova a eseguire la finestra mobile: componi due volte.

Il motivo è che nel mio file docker-compose.yml il servizio DB era al di sotto del servizio Web in cui stava tentando di connettersi al DB che non esiste ancora.

**

version: '2' 
services: 
nginx: 
    image: nginx:latest 
    container_name: ng01 
    ports: 
     - "8000:8000" 
    volumes: 
     - ./src:/src 
     - ./config/nginx:/etc/nginx/conf.d 
     - /static:/static <--- HERE 
    depends_on: 
     - web 
web: 
    build: . 
    container_name: dg01 
    command: bash -c "python /src/IMS/manage.py makemigrations && python /src/IMS/manage.py migrate && gunicorn IMS.wsgi -b 
0.0.0.0:8000" 
    depends_on: 
     - db 
    volumes: 
     - ./src:/src 
     - /static:/static 
    expose: 
     - "8000" 
db: 
    image: postgres:latest 
    container_name: ps01** 
+1

Questo non dovrebbe accadere se hai 'depends_on' – guival

Problemi correlati