Правильный порядок в файле 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)

и у меня есть три вопроса по этому поводу:

  1. Имеет ли значение, где мы указываем порты? Я думаю, что они должны быть после ports, но это тоже работает.
  2. Например, я хочу запустить свое приложение на стандартном 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?

  1. Существует ли какой-то "правильный" порядок компонентов (сборки, томов, портов и т.д.) для django-app?

Пункт 1 действительно неоднозначен (возможно, это опечатка?). Порты относятся к разделу "- порты"

Точка 2: когда вы получаете доступ к приложению, запущенному в контейнере docker с хоста, вы получаете доступ не к локальному интерфейсу (127.0.0.1), а к специальному открытому интерфейсу. Только когда вы открываете оболочку внутри контейнера (то есть изнутри контейнера), вы можете получить доступ к локальному интерфейсу. Поэтому все ваши приложения, запущенные в контейнерах, должны работать на 0.0.0.0. Если они работают на 127.0.0.1, к ним нельзя получить доступ с хоста (но они все равно будут работать).

Точка 3: Не существует правильного порядка. Обычно они генерируются в алфавитном порядке, поэтому многие оперативники привыкли располагать их именно таким образом.

Вернуться на верх