#Что означает ошибка
port is already allocated
Ошибки Docker «port is already allocated» и «bind: address already in use» означают, что порт хоста занят другим контейнером или процессом. Ошибка «network not found» — сеть удалена или повреждена.
Нужно найти занявший порт процесс.
Или изменить порт в compose.
Освободите порт или измените публикацию порта.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Порт занятПроцесс. | Проявляется как «port is already allocated» или близкий по смыслу сбой. | Освободите. |
| Старый контейнерОстался. | Проявляется как «port is already allocated» или близкий по смыслу сбой. | Удалите. |
| Дубль composeПроект. | Проявляется как «port is already allocated» или близкий по смыслу сбой. | Остановите. |
| Другой сервисNginx. | Проявляется как «port is already allocated» или близкий по смыслу сбой. | Смените порт. |
#Пошаговое решение
- Найдите процесс на портуЕсли Docker сообщает, что порт уже занят, прочитайте номер порта хоста после
Bind for ...и выпишите его. На Linux-сервере откройте терминал по SSH, выполнитеsudo ss -ltnp '( sport = :8080 )', заменив 8080 указанным номером; Windows PowerShell используетGet-NetTCPConnection -LocalPort 8080 -State Listen. Если программа слушает порт, посмотрите её PID и имя; не останавливайте процесс без установления владельца. - Остановите лишний контейнерВыполните
docker ps --format "table {{.Names}}\t{{.Ports}}"и найдите контейнер, публикующий нужный порт. Если он остался от действительно закрытого тестового проекта, после согласования выполнитеdocker stop ИМЯ, подставив настоящее имя. Для действующего веб-сервиса остановка прервёт посетителей: в этом случае используйте другой порт или обратный прокси. Командаdocker rm -fне нужна для простого освобождения порта. - Измените порт в composeВ каталоге своего проекта откройте
compose.yamlилиdocker-compose.ymlи найдитеports. Запись"8080:80"означает публикацию контейнерного порта 80 на порту 8080 сервера. Если 8080 занят, замените левую часть на действительно свободный и разрешённый порт, например"8081:80", сохраните файл, проверьтеdocker compose config, затем выполнитеdocker compose up -d. Убедитесь черезdocker compose ps, что новый порт опубликован. - Пересоздайте сетьДля изменения проброса порта Docker Compose обычно достаточно
docker compose up -d: он пересоздаст изменившийся контейнер.docker compose downостановит весь проект и может удалить сеть, вызывая простой других служб. Не выполняйтеdown/upкак обязательную последовательность; планируйте остановку лишь если штатное обновление не сработало, сохранив данные в томах и убедившись в наличии резервных копий. - Очистите неиспользуемые сетиКоманда
docker network pruneудаляет неиспользуемые сети, но обычно не освобождает порт, который слушает конкретный процесс или контейнер. Поэтому при ошибке «port is already allocated» сначала выполнитеdocker psиss/Get-NetTCPConnection, а очистку сетей не проводите. Если после исправления конфигурации порт всё ещё занят, проверьте адрес публикации, журналыdocker compose logs --tail=50и действующие службы хоста.
#Занятый порт
Узнайте, кто слушает: Linux sudo ss -tlnp | grep :8080, Windows netstat -ano | findstr :8080, затем tasklist /fi "pid eq PID". Контейнеры: docker ps --format "table {{.Names}}\t{{.Ports}}". Остановите лишнее: docker stop имя или docker compose down. Или измените публикацию в docker-compose.yml: ports: - "8081:80".
#Сеть не найдена
Если дополнительно появилась другая ошибка network ... not found, это отдельная неисправность настройки сетей Docker Compose. Сначала выполните docker compose config и docker network ls, проверьте, не указан ли внешний ресурс external: true. Не применяйте docker network prune и не останавливайте весь Compose-проект при исходной ошибке занятого порта.
#Прочее
Иногда после аварии нужно проверить оставшиеся процессы docker-proxy, но решение принимает администратор после сопоставления PID и работающих контейнеров. Перезапуск Docker Engine затрагивает другие сервисы и не является штатным способом освобождения порта; на Windows дополнительно проверяются резервирование портов и IIS.
# Только диагностика на Linux, номер порта замените на фактическийsudo ss -ltnp '( sport = :8080 )'docker ps --format "table {{.Names}}\t{{.Ports}}"# В каталоге проектаdocker compose configdocker compose ps