Docker Django Работает ли сервер на этом хосте и принимает ли он TCP/IP-соединения?
Я запускаю Django
приложение на Docker
контейнере, проблема в том, что оно не видит, что соединение с базой данных уже установлено.
Dockerfile
FROM ubuntu
RUN apt-get update
# Avoid tzdata infinite waiting bug
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Africa/Cairo
RUN apt-get install -y apt-utils vim curl apache2 apache2-utils
RUN apt-get -y install python3 libapache2-mod-wsgi-py3
RUN apt -y install certbot python3-certbot-apache
RUN ln /usr/bin/python3 /usr/bin/python
RUN apt-get -y install python3-pip
RUN apt -y install software-properties-common
RUN add-apt-repository universe
RUN apt update
RUN ln -sf /usr/bin/pip3 /usr/bin/pip
RUN pip install --upgrade pip
RUN pip install django ptvsd
RUN apt install wait-for-it
RUN a2enmod headers
RUN service apache2 restart
COPY www/demo_app/water_maps/requirements.txt requirements.txt
RUN pip install -r requirements.txt
ADD ./demo_site.conf /etc/apache2/sites-available/000-default.conf
EXPOSE 80 5432
WORKDIR /var/www/html/demo_app
docker-compose.yaml
version: "2"
services:
db:
image: postgres
restart: always
volumes:
- ./data/db:/var/lib/postgresql/data
ports:
- '5332:5432'
environment:
- POSTGRES_DB=(db name here)
- POSTGRES_USER=(db user here)
- POSTGRES_PASSWORD=(db password here)
django-apache2:
build: .
container_name: test_water_maps
restart: always
environment:
- POSTGRES_DB=(db name here)
- POSTGRES_USER=(db user here)
- POSTGRES_PASSWORD=(db password here)
ports:
- 5000:80
- 5001:443
volumes:
- ./www/:/var/www/html
- ./www/demo_app/kml_files:/var/www/html/demo_app/kml_files
- ./www/demo_app/temp_kml_file:/var/www/html/demo_app/temp_kml_file
- ./www/demo_app/upload:/var/www/html/demo_app/upload
command: sh -c 'wait-for-it db:5432 -- python manage.py migrate && apache2ctl -D FOREGROUND'
# command: sh -c 'wait-for-it db:5432 -- python manage.py migrate && python manage.py loaddata last.json && apache2ctl -D FOREGROUND'
depends_on:
- db
Settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('POSTGRES_DB'),
'USER': os.environ.get('POSTGRES_USER'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
'HOST': 'db',
'PORT': 5332,
}
}
попробуйте этот способ:
ports:
- '5432:5332'
И в settings.py:
'PORT': 5432,
Порт приложения для базы данных должен быть по умолчанию 5432