python-3.x - 连接拒绝在 docker 上使用 Postgresql

标签 python-3.x postgresql docker

我正在尝试通过 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/

相关文章:

python-3.x - 如何在 pyomo 中使用/选择/安装混合整数非线性求解器

postgresql - SQL查询以获取枚举可以具有的所有值

docker - 如何删除 docker 镜像中的配置卷

docker - Docker容器内的权限被拒绝

Python 类型错误 : UMat() missing required argument 'ranges' (pos 2)

来自 yahoo 的 python lxml etree applet 信息

python - __next__ 在生成器和迭代器中,什么是方法包装器?

asp.net-mvc - "upstream prematurely closed connection while reading response header from upstream"在 Ubuntu MVC4 应用程序上使用 nginx、PostgreSQL 和 Mono

ruby-on-rails - 使用 Rails 4.1 在 hstore 字段中选择单个属性

Linux 'script' docker 内的命令未按预期写入文件