AITM резервирует один непрерывный диапазон портов Docker для контейнеров всех управляемых проектов. На этой странице объясняется, как работает этот пул портов и почему проверка CORS — отдельный вопрос.

Порты Docker и доступ CORS

1. Один общий пул портов

AITM резервирует один непрерывный диапазон портов Docker (по умолчанию 20000–20050, 50 портов) для контейнеров всех управляемых проектов. Диапазон задан в src/constants.ts AITM и может быть переопределён через release/docker/.env (AITM_PROJECT_PORTS_START / AITM_PROJECT_PORTS_END) или в Settings → Projects & Memory (projectPortRange).

ПонятиеЧто оно определяетГде настраивается
Диапазон публикации портов Dockerкакие порты контейнеров Docker публикует на хосте, чтобы до них мог достучаться браузерrelease/docker/.env (AITM_PROJECT_PORTS_START/_END) или Settings → Projects & Memory → projectPortRange
Разрешённые источники CORSкакие источники (origin) браузера AITM пропускает через свой OriginPolicyконфигурация сервера AITM, независимо от диапазона портов

Это общий пул, а не отдельный порт или IP-адрес на каждый проект. Чтобы проект был доступен из браузера на хосте, его Web Port должен просто попадать в опубликованный диапазон — AITM не выдаёт отдельные IP-адреса для каждого проекта.

2. CORS — вторая, независимая проверка

Публикация порта в Docker и разрешение источника CORS в AITM — два отдельных условия. Чтобы контейнер проекта был доступен из браузера, должны выполняться оба: порт должен быть опубликован Docker И источник браузера должен быть разрешён OriginPolicy AITM. Выполнения только одного из двух недостаточно.

Практические рекомендации

  • Если порт dev/test-сервера нового проекта оказывается вне опубликованного диапазона, внутри контейнера всё будет выглядеть исправным, но проект окажется недоступным из браузера на хосте.
  • Решение — перенести порт проекта в опубликованный диапазон (или расширить projectPortRange в Settings), а не запрашивать новый IP-адрес.
  • Если с портом всё в порядке, а браузер всё равно сообщает об ошибке CORS, проблема в OriginPolicy, а не в диапазоне портов — это отдельная проверка.