Невозможно получить доступ к домашней странице проекта Django (Docker)
Я создаю приложение с помощью Django, но хотя мое приложение работает нормально (по крайней мере, так мне говорит CLI), я не могу получить доступ к нему через браузер.
Сборка с помощью docker-compose работает отлично, я получаю следующий вывод:
matt $ docker-compose run app sh -c "python manage.py runserver"
[+] Creating 2/2
✔ Network nexus_default Created 0.0s
✔ Container nexus-db-1 Created 0.1s
[+] Running 1/1
✔ Container nexus-db-1 Started 0.2s
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
March 08, 2024 - 23:21:49
Django version 5.0.3, using settings 'app.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Но я не могу получить доступ к нему через браузер (скриншот прилагается)
Мои конфигурации приведены ниже
Dockerfile:
FROM python:3.12-alpine3.19
LABEL maintainer="Matheus Tenório"
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /tmp/requirements.txt
COPY ./requirements.dev.txt /tmp/requirements.dev.txt
COPY ./app /app
WORKDIR /app
EXPOSE 8000
ARG DEV=false
RUN python -m venv /py && \
/py/bin/pip install --upgrade pip && \
apk add --update --no-cache postgresql-client && \
apk add --update --no-cache --virtual .tmp-build-deps \
build-base postgresql-dev musl-dev && \
/py/bin/pip install -r /tmp/requirements.txt && \
if [ $DEV = "true" ]; \
then /py/bin/pip install -r /tmp/requirements.dev.txt ; \
fi && \
rm -rf /tmp && \
apk del .tmp-build-deps && \
adduser \
--disabled-password \
--no-create-home \
djangouser && \
chown djangouser:djangouser -R /app/
ENV PATH="/py/bin:$PATH"
USER djangouser
docker-compose.yml:
version: "3.12"
services:
app:
build:
context: .
args:
- DEV=true
ports:
- "8000:8000"
volumes:
- ./app:/app
command: >
sh -c "python manage.py wait_for_db &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
environment:
- DB_HOST=db
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
depends_on:
- db
db:
image: postgres:16-alpine3.19
volumes:
- dev-db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
volumes:
dev-db-data:
.env
DB_NAME="my_db"
DB_USER="my_user"
DB_PASSWORD="my_password"
settings.py: (Здесь только те конфигурации, которые я изменил по сравнению со стандартными)
import os
ALLOWED_HOSTS = [
"0.0.0.0",
"127.0.0.1",
"localhost",
]
# Database
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': os.environ.get('DB_HOST'),
'NAME': os.environ.get('DB_NAME'),
'USER': os.environ.get('DB_USER'),
'PASSWORD': os.environ.get('DB_PASSWORD'),
}
}
TEST
Итак, давайте создадим работающее приложение Django. Затем вы сможете добавить к нему свою специфическую функциональность.
Я создал простое приложение, и проект имеет следующий макет. Я применил те же изменения, что и вы, к settings.py
.
├── app
│ ├── app
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── __init__.py
│ │ ├── migrations
│ │ │ └── __init__.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ ├── manage.py
│ └── project
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── docker-compose.yml
├── Dockerfile
└── requirements.txt
Для упрощения настроек достаточно указать базу данных SQLite. Вы захотите изменить ее на PostgreSQL, но база данных сейчас не является источником ваших проблем.
🗎 Dockerfile
FROM python:3.12-alpine3.19
LABEL maintainer="Matheus Tenório"
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt requirements.txt
RUN apk add --update --no-cache postgresql-client && \
apk add --update --no-cache --virtual .tmp-build-deps \
build-base postgresql-dev musl-dev && \
pip install -r requirements.txt && \
rm -f requirements.txt && \
apk del .tmp-build-deps && \
adduser \
--disabled-password \
--no-create-home \
djangouser && \
chown djangouser:djangouser -R /app/
COPY app /app
USER djangouser
RUN python manage.py migrate
CMD python manage.py runserver 0.0.0.0:8000
При этом Dockefile
применяет миграции во время сборки, а затем запускает сервер.
🗎 docker-compose.yml
version: "3.12"
services:
app:
build:
context: .
ports:
- "8000:8000"
Для сборки и запуска:
docker-compose build && docker-compose up
После того, как вы запустили эту программу, я предлагаю следующие шаги:
- Добавьте службу
db
к вашемуdocker-compose.yml
. - Измените
settings.py
для использования базы данных PostgreSQL. Настройте учетные данные с помощью переменных окружения вdocker-compose.yml
. .
- Добавьте код вашего конкретного приложения.