n1ro°
RU

Текст и данные · Инструкция

Docker Compose ports и expose: в чём разница и что указывать сервисам

Путаница возникает, когда host-port используют внутри Compose или ожидают, что `expose` откроет порт на машине. Нужно ра

Редакция N1RO · Проверено

Короткий ответ

`ports` публикует container-port на хосте; `expose` лишь документирует/объявляет внутренние порты и не делает сервис доступным с хоста. Между сервисами одной сети обычно достаточно обращаться по service name и container-port без `ports`.

Что делать

  1. Для браузера/хоста: Используйте `ports: - "8080:80"`, если сервис должен открываться как `localhost:8080`.
  2. Для соседнего контейнера: Обращайтесь к `http://service:80` по общей network; публикация 80 наружу не обязательна.
  3. Для документации внутреннего порта: Можно использовать `expose`, но это не host publishing.
  4. Для БД: Не публикуйте порт наружу, если к БД обращаются только контейнеры приложения.
  5. Проверьте результат: `docker compose ps` показывает published ports; network connectivity проверяйте из соседнего сервиса.

Важно

Публикация на `0.0.0.0` может открыть сервис внешней сети хоста.

Что учитывать

Публикация на `0.0.0.0` может открыть сервис внешней сети хоста.

Источники и проверка

Фактическая часть сверена по первичным источникам (в т.ч. Compose services reference). Пример и формулировки — редакция N1RO на 2026-09-17.