无法从我的本地主机 (Windows) 连接 Postgres Docker 容器

问题描述 投票:0回答:2

我正在阅读相关内容并尝试自己解决它:

使用 docker 在 NodeJS 上的 Postgres 的 ECONNREFUSED

由于不支持身份验证类型 10,无法连接到 Postgres 数据库

无法从外部连接到 Docker Postgres

我做了很多步骤,但没有实现从 python 脚本到 Postgres Docker 的连接:

我的docker-compose.yml

version: "3.8"

services:

  postgres:
    image: postgres:14
    restart: always
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=root
      - POSTGRES_PASSWORD=root
      - POSTGRES_DB=project1

  pgadmin:
    image: dpage/pgadmin4
    environment:
      - [email protected]
      - PGADMIN_DEFAULT_PASSWORD=adminadmin
    ports:
      - "5050:80"
    restart: always
    depends_on:
      - postgres

然后我就跑

docker-compose up

我的脚本.py:

import psycopg2

conn = psycopg2.connect(
    host="host.docker.internal",
    database="project1",
    user="root",
    password="root",
    port=5432
)

print(conn)

# create a cursor
cur = conn.cursor()

# execute a statement
print('PostgreSQL database version:')
result = cur.execute('SELECT version()')
print(result)

当我尝试连接到数据库时,如果我更改主机,控制台会触发多个错误:

host.docker.internal(我想我必须在 postgresql.conf 或 pg_hba.conf 中做一些事情,但我不确定):

conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: connection to server at "host.docker.internal" (192.168.1.145), port 5432 failed: FATAL:  no pg_hba.conf entry for host "192.168.1.145", user "root", database "project1", SSL off

本地主机

 conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: connection to server at "localhost" (::1), port 5432 failed: FATAL:  password authentication failed for user "root"

0.0.0.0

conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: connection to server at "0.0.0.0", port 5432 failed: Cannot assign requested address (0x00002741/10049)
        Is the server running on that host and accepting TCP/IP connections?

顺便说一句:Docker 正确运行服务,我可以毫无问题地连接到 PGAdmin。

有什么想法吗?

postgresql docker docker-compose localhost
2个回答
0
投票

这是 docker 将由 localhost 作为主机访问,而不是

host.docker.internal

conn = psycopg2.connect(
    host="localhost",
    database="project1",
    user="root",
    password="root",
    port=5432
)

将来,当您尝试在同一个 docker-compose 文件中为脚本托管容器时,主机将是

postgres

conn = psycopg2.connect(
    host="postgres",
    database="project1",
    user="root",
    password="root",
    port=5432
)

0
投票

就我而言,经过大量搜索,没有找到解决方案。我自己发现了这个问题。 那将是使用同一端口的另一个程序。这就是它造成冲突的原因。 也许是你的问题。 如果您在 Windows 上安装它,请运行以下命令“CMD ADMINISTRATOR”。 列出正在使用端口 5432 的进程。

netstat -ano | findstr :5432

该命令结果的最后一个值是进程ID。

现在完成所有流程。然后再次启动容器。它会起作用的。

taskkill /F /PID idprocess
© www.soinside.com 2019 - 2024. All rights reserved.