无法连接到docker中的postgres服务器

我在sudo docker run -it -p 5432:5432 9c421f1a239c bash启动了一个postgresql服务器,并通过sudo docker run -it -p 5432:5432 9c421f1a239c bash公开了5432端口,并在sudo docker run -it -p 5432:5432 9c421f1a239c bash容器内手动启动postgres服务器,但无法通过命令连接到它: psql -h 172.17.0.63 -U venti172.17.0.63是一个正确的IP,通风是我的PG用户名。 但是得到错误:

 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? 

我的pg_hba.conf看起来像这样:

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

连接到容器内的pg服务器成功工作。

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 

这几乎是一个错误的configuration,我应该设置pg来监听公共地址或进行端口映射。 我解决了这个问题,编辑pgconfiguration文件与sed:

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

把这个添加到Dockerfile中的适当位置应该是可以的。

一般来说,要解决postgresauthentication问题,请查看postgres日志/ stderr来查看失败的详细原因。 (我看到你的问题解决了,但是如果有人遇到类似的问题)

要查找postgres日志位置:“show log_destination;” 如果你有一个工作的psql(例如在本地的postgres服务器框)

我看到你的设置为“/etc/postgresql/9.1/main/postgresql.log”。 您可以连接到容器,以“docker exec -it container_name bash”查看日志。

或者,如果容器直接运行postgres,“docker attach db_container_name”查看postgres stderr消息。

请注意,默认情况下,用户postgres没有密码,只使​​用ident auth。

我也面临类似的问题。 尝试运行docker-compose两次。

原因是,在我的docker-compose.yml文件中,数据库服务位于正在尝试连接到尚不存在的数据库的Web服务的下面。

**

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