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成功连接到容器
根据 psycopg2 的文档。如果主机值为空,则默认情况下它将查找 Postgres 的 Unix 套接字文件。
在您的错误消息中,提到它正在目录下寻找套接字文件(.s.PGSQL.5432)tmp。
如果你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)
现在应该建立连接。