Правильный порядок в файле docker-compose для приложения django
У меня есть django-app, который имеет docker-compose:
services:
web:
build: .
volumes:
- .:/code
ports:
- "80:80"
command: >
sh -c "python manage.py wait_for_db &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:80"
env_file:
- ./.env
depends_on:
- db
restart: always
(... here postgres, redis and celery)
и у меня есть три вопроса по этому поводу:
- Имеет ли значение, где мы указываем порты? Я думаю, что они должны быть после ports, но это тоже работает.
- Например, я хочу запустить свое приложение на стандартном 127.0.0.1:8000, но если я сделаю:
ports:
"8000":"8000"
...
python manage.py runserver 127.0.0.1:8000
Я не могу получить доступ к моему приложению. Оно работает только на localhost, когда я запускаю сервер на 0.0.0.0:8000.
Могу ли я запустить свое приложение на стандартном 127.0.0.1 или только на localhost?
- Существует ли какой-то "правильный" порядок компонентов (сборки, томов, портов и т.д.) для django-app?
Пункт 1 действительно неоднозначен (возможно, это опечатка?). Порты относятся к разделу "- порты"
Точка 2: когда вы получаете доступ к приложению, запущенному в контейнере docker с хоста, вы получаете доступ не к локальному интерфейсу (127.0.0.1), а к специальному открытому интерфейсу. Только когда вы открываете оболочку внутри контейнера (то есть изнутри контейнера), вы можете получить доступ к локальному интерфейсу. Поэтому все ваши приложения, запущенные в контейнерах, должны работать на 0.0.0.0. Если они работают на 127.0.0.1, к ним нельзя получить доступ с хоста (но они все равно будут работать).
Точка 3: Не существует правильного порядка. Обычно они генерируются в алфавитном порядке, поэтому многие оперативники привыкли располагать их именно таким образом.