Django + Docker: соединение с сервером на "localhost" (127.0.0.1), порт 5432 не удалось

Я пытаюсь запустить свое приложение Django (Nginx, Gunicorn) в docker.

Но для запроса http://167.99.137.32/admin/ у меня ошибка: (полный журнал https://pastebin.com/0f8CqCQM)

onnection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused
    Is the server running on that host and accepting TCP/IP connections?
connection to server at "localhost" (::1), port 5432 failed: Address not available
    Is the server running on that host and accepting TCP/IP connections?

Я пробовал ответы из Не удается запустить сервер на Django (соединение отказано) но не решил свою проблему

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'lk_potok_2',
        'USER': 'postgres',
        'PASSWORD': 'post222',
        'HOST': 'localhost',
        'PORT': 5432,
    },

docker-compose.yml

version: '3.9'

services:
  django:
    build: . # path to Dockerfile
    command: sh -c "gunicorn --bind 0.0.0.0:8000 potok.wsgi:application"
    volumes:
      - .:/project
      - static:/project/static
    expose:
      - 8000
    environment:
      - DATABASE_URL=postgres://postgres:post222@localhost:5432/lk_potok_2"
      - DEBUG=1

  db:
    image: postgres:13-alpine
    volumes:
      - pg_data:/var/lib/postgresql/data/
    expose:
      - 5432
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=post222
      - POSTGRES_DB=lk_potok_2

  nginx:
    image: nginx:1.19.8-alpine
    depends_on:
      - django
    ports:
      - "80:80"
    volumes:
      - static:/var/www/html/static
      - ./nginx-conf.d/:/etc/nginx/conf.d

volumes:
    pg_data:
    static:

nginx-conf.nginx

upstream app {
    server django:8000;
}

server {
    listen 80;
    server_name 167.99.137.32;

    location / {
        proxy_pass http://django:8000;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /static/ {
        alias /var/www/html/static/;
    }
}

Я пробовал sudo systemctl start postgresql и sudo systemctl enable postgresql (та же ошибка)

База данных postgres больше не работает по адресу localhost. В вашем случае (поскольку вы назвали контейнер db) это db.

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

Я не очень понимаю, зачем добавлять это сюда:

environment:
      - DATABASE_URL=postgres://postgres:post222@localhost:5432/lk_potok_2"

так как вы не используете его в settings.py. Но здесь также придется использовать db вместо localhost.

--РЕДАКТИРОВАТЬ--

Объяснение того, почему docker может распознавать другие контейнеры, можно найти здесь.

Вернуться на верх