psycopg2无法连接到docker imag

2024-07-07 09:00:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经开始我的docker映像如下:

docker run --name fnf-postgis -e POSTGRES_DB=fnf -e POSTGRES_USER=fnfuser -e POSTGRES_PASSWORD=fnf2pwd -p5432:5432 -d mdillon/postgis:11

我已经设置了django数据库配置:

^{pr2}$

但是,运行makemigrations会出现以下错误:

psycopg2.OperationalError: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

但我可以从pycharm成功连接到容器

enter image description here


Tags: djangodockerrunnamedbserverpostgrespassword
3条回答

您应该提供postgresql docker容器的名称作为host键的值:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'fnf',
        'USER': 'fnfuser',
        'PASSWORD': 'fnf2pwd',
        'HOST': 'fnf-postgis', # Name of postgres docker container
        'PORT': 5432, # Its exposed port
    }
}

根据psycopg2的documentation。如果主机值为空,那么默认情况下它将查找Postgres的Unix套接字文件。在

在您的错误消息中,提到它正在查找tmp目录下的套接字文件(.s.PGSQL.5432)。在

如果您将postgres作为单独的容器运行,那么您可以在容器中的/var/run/postgresql目录下找到这个套接字文件。在

您可以将此文件夹装载到主机上,如下所示:

docker run -e POSTGRES_PASSWORD=mysecretpassword -v /home/username/socket_dir:/var/run/postgresql -d postgres

然后可以更新数据库对象,如下所示:

^{pr2}$

现在应该建立联系了。在

Pycharm和Django设置之间存在差异。在

当Django设置试图连接到''时,Pycharm明确地连接到localhost。在

只需将'localhost'作为HOSTDjango设置就可以了。在

请注意,正确的设置名称是大写HOST和{},而不是小写host和{}。

相关问题 更多 >