#Как выглядит неисправность
Контейнер слушает порт, но сервис доступен только через localhost хоста. Нужно различить привязку опубликованного порта к 127.0.0.1, слушание приложения только на 127.0.0.1 внутри контейнера и внешний сетевой экран.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Порт опубликован только на loopback хостаВ Compose указано 127.0.0.1:8080:80 | docker ps показывает 127.0.0.1:8080->80 | Согласовать нужный внешний интерфейс либо оставить доступ через прокси |
| Приложение внутри слушает только loopbackВнутренний сервер привязан к 127.0.0.1 | Снаружи контейнера соединение отклоняется при верной публикации | Настроить bind на 0.0.0.0 внутри контейнера при правильной защите |
#Пошаговое устранение
- 1. Зафиксируйте, где именно работает URLНа хосте откройте http://127.0.0.1:8080 (подставьте свой порт). Проверьте тот же адрес с другого устройства по IP хоста. Если локально не работает — сначала исправляйте приложение/контейнер; если только удалённо — смотрите публикацию и экран.
- 2. Посмотрите опубликованные портыВыполните docker ps и docker port ИМЯ. Если указан 127.0.0.1:8080, доступ рассчитан на сам хост; для работы через обратный прокси это часто правильно.Linux · Терминал (Bash)КомандаТолько чтение портов, без открытия сетевого доступа.
docker psdocker port ИМЯ
- 3. Проверьте соответствие портов в ComposeОткройте compose.yaml и найдите ports: у сервиса. Запись 8080:80 публикует порт 8080 хоста к 80 контейнера, а 127.0.0.1:8080:80 ограничивает доступ хостом. Если сервис за Nginx, предпочтительнее локальная публикация без внешнего доступа.
- 4. Проверьте адрес прослушивания приложенияВ конфигурации сервера внутри контейнера найдите bind/listen host. Для веб-приложений обычно нужен 0.0.0.0 внутри контейнера; если слушает 127.0.0.1, Docker NAT до процесса может не дойти. Используйте документацию именно приложения.
- 5. Проверьте сетевой экран и интерфейс хостаНа Linux-хосте администратор может посмотреть правила nftables/ufw и интерфейсы; на Windows — правила брандмауэра и профиль сети. Не отключайте экран целиком: согласуйте узкое правило для конкретного IP/порта и ограниченного круга клиентов.
- 6. Примените настройки только по модели безопасностиЕсли доступ нужен извне, настройте прокси с TLS и авторизацией или согласованную публикацию конкретного порта. Сначала примените на тестовом сервисе, выполните docker compose config --quiet и только затем пересоздайте его.Linux · Терминал (Bash)КомандаПроверяет итоговые настройки без запуска.
docker compose config --quiet
- 7. Проверьте доступ с двух сторонПроверьте страницу с самого хоста и с разрешённого клиентского IP. Убедитесь, что с запрещённого источника доступ блокируется, а в логах приложения нет ошибочного Host/Origin. Если удалённый клиент по-прежнему не подключается, ищите проблему в маршрутизации/межсетевом экране.
#Как проверить результат
Успех: сервис отвечает только с разрешённых адресов через предусмотренный прокси/порт; административный интерфейс не открыт всему интернету.
#Если проблема осталась
Не повторяйте опасные действия на рабочем окружении. Сравните первоначальный симптом с новым состоянием, сохраните обезличенные сообщения и версии компонентов, проверьте резервную копию; перед изменением общей истории Git или данных/сети Docker обратитесь к ответственному администратору проекта.