Работает ли сервер на хосте "localhost" (127.0.0.1) и принимает TCP/IP-соединения web-1 на порт 5432?

Я создал проект Django с postgresql backend и пытаюсь его контейнеризировать. Вот мой Dockerfile:

FROM python:3.9

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /app

COPY requirements.txt /app/

RUN pip install --no-cache-dir -r requirements.txt

COPY . /app/

EXPOSE 8000

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Это мой docker-compose.yml файл:

version: '3'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
    networks:
      - inventory_network

  db:
    ports: 
      - "5433:5432"
    image: postgres:16
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=root
      - POSTGRES_DB=InventoryManagement
    networks:
      - inventory_network

networks:
  inventory_network:
    driver: bridge

Вот мой settings.py в проекте django для подключения к бд:

WSGI_APPLICATION = 'Inventory_management.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

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

Команда sudo docker build . выполняется без ошибок. Ошибка, которую я получаю при попытке запустить 'sudo docker compose up', выглядит следующим образом: Работает ли сервер на хосте "localhost" (127.0.0.1) и принимает web-1 TCP/IP соединения на порт 5432?

Я подтвердил, что сервер postgres запущен: Server active(running). Это приложение также работает без каких-либо ошибок на моем локальном сервере.

Я создал сеть (inventory_network), к которой я пытался прикрепить свои контейнеры. Но я заметил, что всякий раз, когда я выполнял команду 'compose up', она автоматически создавала другую сеть inventory_management_inventory_network, к которой присоединялись контейнеры, вместо указанной мной сети inventory_network:

Вот что я получил, когда запустил 'inspect' для обеих сетей, так как не был уверен, связано ли это с проблемой: inventory_network inspect inventory_management_inventory_network inspect

Я перепробовал все, что знаю, и был бы очень признателен за любые предложения.

Было бы полезно узнать, как выглядит макет вашего проекта. Это что-то вроде этого?

├── docker-compose.yml
├── Dockerfile
├── Inventory_management
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── requirements.txt

Можете ли вы добавить эту информацию к своему вопросу?

Кроме того, для описанной вами установки вы должны использовать порт 5432 (а не 5433) в ваших settings.py:

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

Как отмечалось в одном из комментариев, сопоставление портов не применяется к соединениям между контейнерами.

В журнале ошибок есть строка "WARN[0000] /home/prisha/Inventory_Management/docker-compose.yml: version устарел":

docker-compose.yml: version устарел"

Поскольку Docker сделал эту строку версии устаревшей, удалите ее из файла docker-compose.yml, который, скорее всего, является причиной этой проблемы.

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