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

kxx*_*ing 12 postgresql docker

我开始在码头工人一个PostgreSQL服务器,并通过公开的5432端口sudo docker run -it -p 5432:5432 9c421f1a239c bash和手动启动Postgres服务器来泊坞窗容器内,但不能与命令连接到它:psql -h 172.17.0.63 -U venti.172.17.0.63是一个正确的IP,通风是我的用户名.但得到错误:

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?
Run Code Online (Sandbox Code Playgroud)

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

local   all             postgres                                peer
host all all 0.0.0.0/0 trust
local all all trust
Run Code Online (Sandbox Code Playgroud)

连接到容器内的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
Run Code Online (Sandbox Code Playgroud)

kxx*_*ing 5

这只是一个错误的配置。我应该设置 pg 来监听公共地址或进行端口映射。我通过用 sed 编辑 pg 配置文件来解决这个问题:

 RUN sed -e "s/[#]\?listen_addresses = .*/listen_addresses = '*'/g" -i '/etc/postgresql/9.1/main/postgresql.conf'
Run Code Online (Sandbox Code Playgroud)

将此添加到 Dockerfile 中的适当位置,您应该没问题。