Текст и данные · Инструкция
Docker Compose ports и expose: в чём разница и что указывать сервисам
Путаница возникает, когда host-port используют внутри Compose или ожидают, что `expose` откроет порт на машине. Нужно ра
Короткий ответ
`ports` публикует container-port на хосте; `expose` лишь документирует/объявляет внутренние порты и не делает сервис доступным с хоста. Между сервисами одной сети обычно достаточно обращаться по service name и container-port без `ports`.
Что делать
- Для браузера/хоста: Используйте `ports: - "8080:80"`, если сервис должен открываться как `localhost:8080`.
- Для соседнего контейнера: Обращайтесь к `http://service:80` по общей network; публикация 80 наружу не обязательна.
- Для документации внутреннего порта: Можно использовать `expose`, но это не host publishing.
- Для БД: Не публикуйте порт наружу, если к БД обращаются только контейнеры приложения.
- Проверьте результат: `docker compose ps` показывает published ports; network connectivity проверяйте из соседнего сервиса.
Важно
Публикация на `0.0.0.0` может открыть сервис внешней сети хоста.
Что учитывать
Публикация на `0.0.0.0` может открыть сервис внешней сети хоста.
Источники и проверка
Фактическая часть сверена по первичным источникам (в т.ч. Compose services reference). Пример и формулировки — редакция N1RO на 2026-09-17.