我在 Windows 上使用 Docker 在本地 postgres 数据库中使用。我制作了两个 docker 容器:一个用于名为 pg 的数据库,另一个用于 pgadmin4 的 pgadmin。 检查 pg 后,我在 172.17.0.3:5432 中连接了 pgadmin4 并且它工作正常。 现在是时候编写代码了,但是...
psycopg2.OperationalError: could not connect to server: Connection timed out (0x0000274C/10060)
Is the server running on host "172.17.0.3" and accepting
TCP/IP connections on port 5432?
我读了很多类似的问题,但我无法弄清楚。对我来说,似乎不像在 pg_hba.conf 中为被拒绝的连接生成的问题,因为在这种情况下 pgadmin 不应该工作,对吧? (但是如果是pg_hba.conf的问题在哪里可以找到呢?在docker安装文件夹里没找到)
我把我的 python 代码放在这里,但似乎没有问题:
conn = psycopg2.connect(
database = 'example',
user = 'username',
password = 'secretpassword',
host = '172.17.0.3', # default port is 5432 so it's not necessary
)
升级编辑: 我找到了配置 在 postgresql.conf 中,listen_addresses = '*',这是正确的。 在 pg_hba.conf 中:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
答案 0 :(得分:0)
您可以使用 docker run
和 --expose
参数在每个容器上公开您的端口。
您可以运行的另一个命令是 docker network connect
,它允许您将容器连接到网络,因此如果两个容器在同一网络上,它们应该能够相互通信。
用法是docker network connect [OPTIONS] NETWORK CONTAINER
使用 docker network create
命令的一个优点是能够创建一个 --ip-range
以指定要在网络上使用的 IP 地址。
之后,您可以为容器分配一个特定的 IP 地址,docker network connect
。例如,如果容器不在网络上,则 IP 地址不会重新分配给网络上的另一个容器。
docker 文档中的更多信息, https://docs.docker.com/engine/reference/commandline/network_connect/