web-dev-qa-db-fra.com

Impossible de se connecter au serveur postgres dans le menu fixe

J'ai démarré un serveur postgresql dans docker et exposé le port 5432 avec Sudo docker run -it -p 5432:5432 9c421f1a239c bash et le démarrer manuellement à l'intérieur du conteneur docker, mais je ne peux pas me connecter à celui-ci à l'aide de la commande: psql -h 172.17.0.63 -U venti. 172.17.0.63 est une adresse IP droite et venti est mon nom d'utilisateur pg. Mais obtenez une erreur:

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?

Mon pg_hba.conf ressemble à ceci:

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

La connexion au serveur PG dans le conteneur fonctionne correctement.

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
11
kxxoling

C'est simplement une mauvaise configuration. J'aurais dû configurer pg pour écouter des adresses publiques ou faire un mappage de port. J'ai corrigé cela en éditant le fichier de configuration pg avec sed:

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

Ajoutez ceci à une place appropriée dans votre fichier Docker, et tout devrait bien se passer.

3
kxxoling

J'ai également fait face à un problème similaire. Essayez de lancer docker-compose deux fois. 

La raison en est que, dans mon fichier docker-compose.yml, le service de base de données était situé sous le service Web dans lequel il essayait de se connecter à une base de données qui n'existe pas encore.

**

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**
0
prashant

Pour résoudre les problèmes d'authentification postgres en général, consultez le journal/stderr de postgres pour connaître les raisons détaillées de son échec. (Je vois que votre problème est résolu, mais si quelqu'un rencontre des problèmes similaires)

Pour trouver l'emplacement du journal postgres: "show log_destination;" si vous avez un psql fonctionnel (par exemple localement sur le serveur postgres)

Je vois que le vôtre est réglé sur "/etc/postgresql/9.1/main/postgresql.log". Vous pouvez vous connecter au conteneur pour afficher le journal à l'aide de "docker exec -it nom_conteneur bash".

Par ailleurs, si un conteneur exécute directement postgres, "docker attach db_container_name" affiche les messages postgres stderr.

Notez que par défaut, l'utilisateur postgres n'a pas de mot de passe et utilise uniquement ident auth.

0
Curtis Yallop