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

时间:2017-12-19 15:30:26

标签: postgresql ubuntu docker

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

编辑:我很遗憾地说,昨天和今天之间的问题“自己”消失了,没有我做过任何事情。这里要学习很好的非确定性课程...... 额外的乐趣:“无法绑定IPv6套接字”错误仍然出现在错误日志中,所以这可能首先不是问题。

我遇到了以前正在运行的docker PGSQL映像的问题。直到昨天没有灵感的重建(:-D),我在过去的5个多月里成功地使用了这个版本。

我的系统:

  • Ubuntu 17.04 64b
  • PGSQL 9.6.4
  • Docker版本17.11.0-ce,build 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 <->

我已经清理了所有的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

2 个答案:

答案 0 :(得分:6)

很长一段时间后,我们终于弄清了问题所在,在这里添加了说明,以防其他人得到帮助。

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

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

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

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

答案 1 :(得分:0)

必须对postgres.confpg_hba.conf文件进行某些编辑,以使容器内的Postgres侦听来自主机的连接:

请参见cityseer/postgis回购中的Gotchas部分。

  • 检查您的postgresql.conf文件中的listen_addresses项目是否未注释,并设置为侦听所有端口,即listen_addresses = '*';
  • 检查您的pg_hba.conf文件是否允许docker容器的Postgres按照以下两行提供本地访问和主机访问:

    local all all trust

    host all all 0.0.0.0/0 trust