python - 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
我已经设置了我的 django db 配置:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'fnf',
'USER': 'fnfuser',
'PASSWORD': 'fnf2pwd',
'host': '',
'port': 5432,
但是,运行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
然后你可以像下面这样更新你的DATABASE对象:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'fnf',
'USER': 'fnfuser',
'PASSWORD': 'fnf2pwd',
'host': '/home/username/socket_dir/',
'port': 5432,
现在应该建立连接。
推荐阅读
- python - 如何在 PySimpleGUI 中更新 SetOptions?
- symfony - Symfony 的 make:entity 无法确定新类的位置,尽管传递了完整的命名空间
- boost - 将数据写入客户端时提升协程服务器崩溃
- python-3.6 - 无法启动 Odoo 服务器
- c++ - 如何生成dict的char序列?
- c++ - 有没有一种优雅的方式来使用向量修饰符并获取新向量而不是更改原始向量?
- tableau-api - Tableau 中的连续月份显示月份 + 年份
- dart - Dart 应该推断类成员类型吗?
- java - 如何在 Android 的 C# 中使用 ToFileTime?
- javascript - 如何在我的两个 Electron 应用程序窗口上放置主题(暗/亮模式)?