Docker- django连接Postgres时出错:psycopg2.OperationalError: could not connect to server: Connection refused

4

我希望你能协助我将我的Django-postgres应用程序进行Docker化。 我的Dockerfile文件如下:

FROM python:3

ENV PYTHONUNBUFFERED 1

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

我的docker-compose.yml文件如下:
version: '3'

services:
  web:
    build: .
    command: python app/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: password

我的settings.py文件中有以下数据库代码:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'password',
        'HOST': '0.0.0.0',
        'PORT': '5432',
    }
}

我的数据库和web容器已经启动,但是当我运行以下命令:

docker-compose run web python manage.py migrate

时出现了错误:

psycopg2.OperationalError: could not connect to server: Connection refused Is the server running on host "0.0.0.0" and accepting TCP/IP connections on port 5432?

我应该怎么让我的容器之间通信呢?

1个回答

8

HOST 更改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'password',
        'HOST': 'db',
        'PORT': '5432',
    }
}

0.0.0.0不是一个有效的IP地址,此外你需要使用服务名进行连接,因为compose会自动解析它。


如果在compose中的任何一个容器中运行,那么是的,它应该可以工作。 - LinPy
当我从容器中运行它时,它起作用了。非常感谢@LinPy! - Sprookd
如果要在容器之外使用,请使用:localhost:5432 - LinPy
我想在容器外使用我的Django应用程序,但我无法通过localhost:5432/api/访问它。由于某种原因,这似乎不起作用。 netstat -ant | find“8000”netstat -ant | find“5432”都为空。 - Sprookd
是的,没错。但我也想在容器外访问它。应该是 localhost:8000/api/…,但它不起作用。 - Sprookd
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接