无法使用 docker 连接到 ipv6 中的 postgres

Posted

技术标签:

【中文标题】无法使用 docker 连接到 ipv6 中的 postgres【英文标题】:can't connect to postgres in ipv6 using docker 【发布时间】:2020-12-10 01:13:17 【问题描述】:

我的场景如下:我在 ubuntu 20.04 服务器上安装了一个 postgres 12,并在另一个启用了 ipv6 的主机上运行了一个 docker 容器。

我无法使用 ipv6 从 docker 容器内部访问 postgres 服务器。

这些命令在容器内工作:

$ ping POSTGRES_SERVER_IPv4
$ ping POSTGRES_SERVER_IPv6
$ telnet POSTGRES_SERVER_IPv4 5432

但这在容器内部不起作用(但它在 docker 主机中起作用):

$ telnet POSTGRES_SERVER_IPv6 5432

我已经在 postgres pg_hba.conf 中设置了 listen_address = '*' 和 "host all all md5"。

编辑:

我意识到我的网络适配器正在使用两个 IPv6,一个是我在 netplan 中定义的静态,另一个在我的网络范围内,但我没有分配它。

【问题讨论】:

你能从另一台(非 docker)机器访问 postgres 服务器吗? "在您可以在 Docker 容器或 swarm 服务中使用 IPv6 之前,您需要在 Docker 守护进程中启用 IPv6 支持。" ...docs.docker.com/config/daemon/ipv6 是的,我可以@Turing85。 它已经启用@MarcSances。 【参考方案1】:

在你的 netplan 配置中,尝试添加:

接受-ra:不

示例:

network:
  version: 2
  ethernets:
    ens192:
      accept-ra: no
      addresses: ...

【讨论】:

谢谢,解决了。显然我的适配器从我的 RA 获得了另一个 ipv6,但奇怪的是问题只发生在 docker 容器内或使用 putty (ssh)。

以上是关于无法使用 docker 连接到 ipv6 中的 postgres的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 JDBC 连接到 docker 中的本地 MySQL

无法在本地环境中使用 docker 连接到 cakephp 中的 mysql 数据库

Django无法连接到docker中的redis

Docker 命令无法连接到 Docker 守护进程

无法从 golang 连接到 docker postgres 容器

无法从本地主机连接到 Docker 中的 MySQL(Docker for Mac beta)