Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Django连接到Docker Postgres实例引发Django.db.utils.OperationalError_Python_Django_Docker - Fatal编程技术网

Python 将Django连接到Docker Postgres实例引发Django.db.utils.OperationalError

Python 将Django连接到Docker Postgres实例引发Django.db.utils.OperationalError,python,django,docker,Python,Django,Docker,我正在本地机器上执行一个django项目,该项目需要Postgres 我对docker几乎一无所知。我从docker hub中提取postgres图像,并按照in-postgres docker hub页面的建议执行followin命令 $ docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres docker容器已启动: CONTAINER ID IMAGE

我正在本地机器上执行一个django项目,该项目需要Postgres

我对docker几乎一无所知。我从docker hub中提取postgres图像,并按照in-postgres docker hub页面的建议执行followin命令

$ 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?
我假设连接没有被拒绝,因为如果我停止容器,错误是相同的。

一些教程/答案建议主机应该是容器名称。对我来说,这没有多大意义,因为我不知道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:


很好的类比是Web服务器——假设您在端口8000的容器中启动django应用程序。你不能简单地打开firefox并从主机内导航到localhost:8000,因为应用程序正在一个孤立的环境中运行。

我建议
docker compose
这将使你的生活更加轻松。我的这个项目有一个连接django和postgres的
docker compese.yml
。我已经避免了在我一无所知的基础上学习其他东西,但是如果我使用docker compose,这是否意味着django proj和postgres都必须在容器上运行?或者我仍然可以在本地机器上使用django?(我说的本地机器不是指容器)太棒了!找不到一种方法来处理已经创建的实例,但是,
$docker run--命名一些postgres-p 5432:5432-e postgres_PASSWORD=mysecretpassword-d postgres
非常有效!