psycopg2无法连接到Docker映像

Tjo*_*rie 13 python django psycopg2 docker

我已经按如下所示启动了docker镜像:

docker run --name fnf-postgis -e POSTGRES_DB=fnf -e POSTGRES_USER=fnfuser -e POSTGRES_PASSWORD=fnf2pwd -p5432:5432 -d mdillon/postgis:11
Run Code Online (Sandbox Code Playgroud)

并且我已经设置了我的Django数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'fnf',
        'USER': 'fnfuser',
        'PASSWORD': 'fnf2pwd',
        'host': '',
        'port': 5432,
Run Code Online (Sandbox Code Playgroud)

但是,运行时出现makemigrations此错误:

psycopg2.OperationalError:无法连接到服务器:没有这样的文件或目录服务器是否在本地运行并且在Unix域套接字“ /tmp/.s.PGSQL.5432”上接受连接?

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

在此处输入图片说明

Thi*_*lak 6

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

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

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

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

docker run -e POSTGRES_PASSWORD=mysecretpassword -v /home/username/socket_dir:/var/run/postgresql -d postgres
Run Code Online (Sandbox Code Playgroud)

然后你可以更新你的DATABASE对象,如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'fnf',
        'USER': 'fnfuser',
        'PASSWORD': 'fnf2pwd',
        'host': '/home/username/socket_dir/',
        'port': 5432,
Run Code Online (Sandbox Code Playgroud)

现在应该建立连接。