我正在尝试通过 psycopg2 连接到 postgres docker 容器,但我一直收到同样的错误。
我在 jupyter(docker 容器)上执行此操作,我重新启动了几次 postgres 容器,并将 postgresql.config listen_addresses = '*'
更改为 listen_addresses = 'localhost'
还是一样的错误。
这是 docker 运行命令:
docker run --name postgres -e POSTGRES_PASSWORD=xxxxxxx -d -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data postgres
python
import psycopg2 as pg
connection = pg.connect("host=localhost dbname=easy_cleaning user=root")
我希望连接,但出现此错误:
----> 3 connection = pg.connect("host=localhost dbname=easy_cleaning user=root")
/opt/conda/lib/python3.7/site-packages/psycopg2/__init__.py in connect(dsn, connection_factory, cursor_factory, **kwargs)
124
125 dsn = _ext.make_dsn(dsn, **kwargs)
--> 126 conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
127 if cursor_factory is not None:
128 conn.cursor_factory = cursor_factory
OperationalError: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
最佳答案
在您的配置中,您的容器不在本地主机上,Docker 为它创建了一个私有(private) IP。所以你需要运行:
docker inspect postgres
然后寻找要在您的连接中使用的 IPAddress 字段:
connection = pg.connect("host=<DOCKER_IP_ADDRESS> dbname=easy_cleaning user=root")
或
您可以使用 docker-compose 将图像作为服务运行,并且每个服务都有自己的名称,可以在您的连接中用作主机名,例如:
connection = pg.connect("host=postgres dbname=easy_cleaning user=root")
阅读更多 here
关于python-3.x - 连接拒绝在 docker 上使用 Postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57775736/