#django #postgresql #docker #docker-compose
#django #postgresql #docker #docker-compose
Вопрос:
Я пытаюсь запустить свое приложение django внутри контейнера docker
docker-compose.yml
version: '3.8'
services:
api:
build:
context: .
dockerfile: ./Dockerfile-local
ports:
- "8000:8000"
entrypoint: ./entrypoint-local.sh
env_file:
- .env-local
links:
- postgresql
postgresql:
image: postgres:12.4
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=frov_db
- POSTGRES_PASSWORD=postgres
- POSTGRES_HOST=postgresql
- POSTGRES_PORT=5432
- PGDATA=/var/lib/postgresql/data/pgdata
- C_FORCE_ROOT=true
ports:
- '5433:5432'
Dockerfile-local
FROM python:3.8-slim
ENV PYTHONDONTWRITEBYTECODE 1
WORKDIR /usr/src/app
COPY Pipfile.lock Pipfile ./
RUN pip install -U setuptools pip pipenv amp;amp; pipenv install --system --deploy --ignore-pipfile --dev
COPY . .
RUN touch /var/log/filebeat.log amp;amp; chmod 664 /var/log/filebeat.log
amp;amp; chmod x ./entrypoint-local.sh
entrypoint-local.sh
#!/bin/bash
python manage.py collectstatic --no-input --settings frov.settings.default
python manage.py migrate --settings frov.settings.default
python manage.py seed
gunicorn -b 0.0.0.0:8000 --workers=1 --env DJANGO_SETTINGS_MODULE=frov.settings.default frov.wsgi:application
.env-local
DEBUG=True
DJANGO_SETTINGS_MODULE=frov.settings.default
DB_NAME=frov_db
DB_USER=postgres
DB_PASS=postgres
DB_HOST=postgresql
DB_PORT=5433
И теперь у меня есть идея, почему я получаю такую ошибку
api_1 | psycopg2.OperationalError: could not connect to server: Connection refused
api_1 | Is the server running on host "postgresql" (172.21.0.2) and accepting
api_1 | TCP/IP connections on port 5433?
Кто-нибудь может мне помочь? Я просто не могу понять, где может произойти ошибка
Комментарии:
1.
5433
открыт ли порт для хоста. Внутри сети docker postgres по-прежнему доступенpostgresql:5432
, поэтому попробуйте переключить порт в env на5432
2. @awesoon — о, да, вы правы. Если вы хотите, вы можете опубликовать ответ, и я его приму
3. @Stefano
5432
— это порт контейнера, открытый как5433
порт хоста. Однако даже документы ссылаются на5433
порт какthe publicly exposed port
. Поэтому я прошу прощения за путаницу, но я не думаю, что я здесь ошибаюсь.4. вы правы. Я прошу прощения.
Ответ №1:
Этот ports
раздел конфигурации:
ports:
- '5433:5432'
Предоставляет 5432
порт контейнера 5433
для порта хоста. Однако в сети docker БД по-прежнему доступна через 5432
порт, поэтому вам нужно изменить свой .env
файл, чтобы использовать 5432
порт.
Если вам не нужны другие приложения для доступа к БД с хоста, вы можете вообще пропустить этот ports
раздел (вы все равно сможете подключиться к нему, используя, например docker-compose exec
)