Docker Linux

Docker: port is already allocated — порт уже занят

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

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

Освободите порт или измените публикацию порта.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Занятый порт
  5. Сеть не найдена
  6. Прочее

#Что означает ошибка

Сообщение
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» или близкий по смыслу сбой.Смените порт.

#Пошаговое решение

  1. Найдите процесс на портуЕсли Docker сообщает, что порт уже занят, прочитайте номер порта хоста после Bind for ... и выпишите его. На Linux-сервере откройте терминал по SSH, выполните sudo ss -ltnp '( sport = :8080 )', заменив 8080 указанным номером; Windows PowerShell использует Get-NetTCPConnection -LocalPort 8080 -State Listen. Если программа слушает порт, посмотрите её PID и имя; не останавливайте процесс без установления владельца.
  2. Остановите лишний контейнерВыполните docker ps --format "table {{.Names}}\t{{.Ports}}" и найдите контейнер, публикующий нужный порт. Если он остался от действительно закрытого тестового проекта, после согласования выполните docker stop ИМЯ, подставив настоящее имя. Для действующего веб-сервиса остановка прервёт посетителей: в этом случае используйте другой порт или обратный прокси. Команда docker rm -f не нужна для простого освобождения порта.
  3. Измените порт в composeВ каталоге своего проекта откройте compose.yaml или docker-compose.yml и найдите ports. Запись "8080:80" означает публикацию контейнерного порта 80 на порту 8080 сервера. Если 8080 занят, замените левую часть на действительно свободный и разрешённый порт, например "8081:80", сохраните файл, проверьте docker compose config, затем выполните docker compose up -d. Убедитесь через docker compose ps, что новый порт опубликован.
  4. Пересоздайте сетьДля изменения проброса порта Docker Compose обычно достаточно docker compose up -d: он пересоздаст изменившийся контейнер. docker compose down остановит весь проект и может удалить сеть, вызывая простой других служб. Не выполняйте down/up как обязательную последовательность; планируйте остановку лишь если штатное обновление не сработало, сохранив данные в томах и убедившись в наличии резервных копий.
  5. Очистите неиспользуемые сетиКоманда 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 · Терминал (Bash)КомандаНужен sudo
Удалены docker compose down и docker network prune из общей последовательности
# Только диагностика на Linux, номер порта замените на фактический
sudo ss -ltnp '( sport = :8080 )'
docker ps --format "table {{.Names}}\t{{.Ports}}"
# В каталоге проекта
docker compose config
docker compose ps

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.