Работает ли сервер на хосте "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
, который, скорее всего, является причиной этой проблемы.