![](/img/trans.png)
[英]Connecting Django to Postgres: django.db.utils.OperationalError: FATAL: database "DATABASENAME" does not exist
[英]Connecting Django to Docker Postgres instance raising django.db.utils.OperationalError
我正在尝试在我的本地机器上执行 django 项目,该项目需要 Postgres。
我对 docker 几乎一无所知。 我从 docker 集线器中提取了 postgres 图像,并按照 postgres docker 集线器页面中的说明执行了以下命令。
$ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
docker 容器已启动:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
402180487f68 postgres "docker-entrypoint.s…" 2 hours ago Up 2 hours 5432/tcp some-postgres
但我无法让 Django 连接到它。 (Django 在我的本地机器上运行,而不是在 docker 上) Django 设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'mysecretpassword',
'HOST': 'localhost',
'PORT': 5432,
}
}
如果我使用上述设置执行迁移,错误是:
django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
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?
我假设连接没有被拒绝,因为如果我停止容器,错误是一样的。
一些教程/答案建议 HOST 应该是容器名称。 对我来说这没有多大意义,因为我不知道 Django 应该如何解决这个问题,但我还是尝试了:
'HOST': 'some-postgres',
引发的错误是:
django.db.utils.OperationalError: could not translate host name "some-postgres" to address: nodename nor servname provided, or not known
我检查了几个问题和教程,但它们似乎都使用 docker-composer 和/或在 docker 中也有 django 项目。 仍然无法使项目连接到 postgres。
我相信您必须从 docker 转发端口 5432: https://docs.docker.com/config/containers/container-networking
一个很好的类比是一个网络服务器 - 假设您将在端口 8000 上的容器中启动 django 应用程序。您不能简单地打开 firefox 并从主机内导航到 localhost:8000,因为应用程序在隔离环境中运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.