PostgreSQL泊坞窗:“无法绑定IPv6套接字:无法分配请求的地址”

ACE*_*CEG 5 postgresql ubuntu docker

编辑2:经过很长时间,解决了!请参阅下面的答案。

编辑:很遗憾地说,问题在昨天和今天之间“自行解决”,而我没有做任何事情。此处提供了很多很棒的非确定性课程。

我对以前运行的Docker PGSQL映像有问题。直到昨天进行了无启发性的重建(:-D),在过去的5个月中,我已经成功使用了此构建。

我的系统:

  • Ubuntu 17.04 64b
  • PGSQL 9.6.4
  • Docker版本17.11.0-CE,内部版本1caf76c
  • 我将主机端口5433映射到容器端口5432

问题(来自PGSQL日志的片段):

...

日志:无法绑定IPv6套接字:无法分配请求的地址

提示:端口5432上是否已在运行另一个邮政局长?如果不是,请等待几秒钟,然后重试。

...

这是ss告诉我的(显然,当容器运行时):

    $ docker exec -it db ss -atune
    Netid  State      Recv-Q Send-Q     Local Address:Port       Peer Address:Port 
    udp    ESTAB      0      0              127.0.0.1:45876         127.0.0.1:45876  uid:999 ino:147509 sk:00000001 <->
    tcp    LISTEN     0      128            127.0.0.1:5432                  *:*      uid:999 ino:147500 sk:00000002 <->
Run Code Online (Sandbox Code Playgroud)

我已经清理了所有docker容器/映像,已经重新安装了docker,没有任何帮助。谁可以使用容器中的5432端口?就此而言,我是否正确阅读了以下内容,即PGSQL抱怨docker容器中已经使用了5432端口?

即使您没有解决方案,有关如何进行调试的基本想法也将大有帮助。

编辑:

postgres.docker文件

FROM postgres:9.6.4

ADD bin/postgres-setup.sh /docker-entrypoint-initdb.d/postgres-setup.sh

RUN chmod 755 /docker-entrypoint-initdb.d/postgres-setup.sh && \
    apt-get update && \
    apt-get install -y --no-install-recommends postgresql-plpython3-9.6 python3-pip postgresql-9.6-pldebugger && \
    pip3 install pyexcel pyexcel-xls pyexcel-xlsx pyexcel-xlsxw
Run Code Online (Sandbox Code Playgroud)

ACE*_*CEG 11

经过很长一段时间,我们终于弄清楚了问题所在-在此处添加说明,以防其他人受到帮助。

由于pgsql默认情况下仅侦听localhost,因此当它在具有端口映射配置的docker容器中运行时,外部API无法连接到pgsql服务器。

解决方案是允许pgsql监听所有IP地址:

  1. 连接到数据库容器外壳: $ docker exec -ti db bash

  2. 更改配置文件/var/lib/postgresql/data/postgresql.conf以允许pgsql侦听所有IP:listen_addresses = '*'

  • 您可能还需要在 pg_hba.conf 文件中为 docker 容器添加一个条目到 IPV4 本地连接主机允许规则。我强制我的 docker 网络只分配 10.5.0.0/16 范围内的 IP 地址,并将该范围列入我的 pg_hba.conf 文件中的白名单。这允许我的应用程序 docker 容器连接到我的 postgres docker 容器。 (2认同)