Проблемы Django и Postgres при докеризации
Здравствуйте, я не могу докеризировать мое приложение django, потому что я получил ошибку -
listen tcp4 0.0.0.0:5433: bind: address already in use
С другой стороны, когда я "убиваю" порт 5433 в терминале ubuntu, я получаю эту ошибку
Is the server running on host "localhost" (::1) and accepting
web_1 | TCP/IP connections on port 5433?
Что я могу сделать для решения этой проблемы и успешной докеризации моего приложения? Dockerfile
FROM python:3
RUN adduser --system --no-create-home django
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
ENV PYTHONPATH /code
EXPOSE 8000
USER django
CMD ["./main.py"]
docker-compose
version: "3"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=fitshop
- POSTGRES_USER=fituser
- POSTGRES_PASSWORD=fitpass
ports:
- "5433:5433"
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
restart: always
ports:
- "8000:8000"
depends_on:
- db
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'fitshop',
'USER': 'fituser',
'PASSWORD': 'fitpass',
'HOST': 'localhost',
'PORT': '5433',
}
}
Вы должны использовать "db" в качестве хоста. В установке docker-compose каждый сервис запускается в отдельном контейнере, а конфигурация /etc/hosts
всех контейнеров изменяется таким образом, чтобы каждый контейнер мог найти другие контейнеры по именам сервисов.
У меня получилось! На 'localhost' порт postgres был 5433, но для 'db' как HOST он был по умолчанию, 5432.