Порты недоступны: слушайте tcp 0.0.0.0/50070: bind: Предпринята попытка доступа к сокету способом, запрещенным его правами доступа

Я пытаюсь запустить контейнер докеров с помощью приведенной ниже команды.

docker run -it -p 50070:50070 -p 8088:8088 -p 8080:8080 suhothayan/hadoop-spark-pig-hive:2.9.2 bash

Это закончилось следующей ошибкой.

docker: ответ об ошибке от демона: порты недоступны: слушайте tcp 0.0.0.0/50070: bind: была предпринята попытка доступа к сокету способом, запрещенным его правами доступа.

Насколько я понимаю, ошибка возникла из-за того, что порт 50070 используется другим процессом. Я попытался идентифицировать процесс, чтобы убить его с помощью приведенной ниже команды в командной строке, но он не дает ни вывода, ни ошибки.

netstat -ano | findstr :50080
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
92
1
83 177
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Согласно проблеме Docker для Windows https://github.com/docker/for-win/issues/3171:

У вас может быть этот порт в любом из исключенных диапазонов портов команды netsh interface ipv4 show excludedportrange protocol=tcp

Вы можете использовать решение, указанное в приведенном выше билете.

  1. Отключить Hyper-V (что потребует пару перезапусков)

    dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

  2. После завершения всех необходимых перезапусков зарезервируйте нужный порт, чтобы Hyper-V не зарезервировал его обратно.

    netsh int ipv4 add excludedportrange protocol=tcp startport=50070 numberofports=1

  3. Повторно включите Hyper-V (для чего потребуется несколько перезапусков)

    dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

Мне помогло это решение (запускайте терминал от имени администратора):

net stop winnat
docker start container_name
net start winnat

Это не объясняет, почему что-то терпит неудачу.

Thorbjørn Ravn Andersen 15.11.2021 14:06

Спасибо, это помогло мне. Я столкнулся с той же ошибкой, я запустил первую команду (net stop winnat) в режиме администратора Windows PowerShell, затем я запустил (docker-compose up --build -d) и в конце запустил последнюю команду (net start Виннат).

Aarony 06.01.2022 09:49

На моем локальном компьютере была аналогичная проблема с Docker Desktop, и включена интеграция с Debian / Ubuntu, установленным в качестве дистрибутива по умолчанию (WSL2 является стандартным для всех). Как я решил:

  • Настройки Docker отключены «Запускать Docker Desktop при входе в систему»
  • Перезагрузка Windows
  • Первый запуск Debian/Ubuntu
  • Затем запустите рабочий стол Docker.

Я сделал это, чтобы остановить процессы tcp =>

  • чистая остановка
  • чистый старт

Таким образом, работа занятого порта завершается.

Это сработало для меня.

Я столкнулся с этой ситуацией, когда мое VPN-соединение активно.
вы можете временно отключить VPN-подключение, после этого запустить docker container, вернуться и снова подключиться к VPN

Перезапуск winnat не лучшая идея. Основная причина в том, что некоторые порты Windows динамически зарезервированы, даже если они не заняты. Эту команду можно использовать для решения.

netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384

Эта статья подробно объясняет это, и я рекомендую взглянуть на это:
Полностью решить проблему запуска docker-контейнеров на Windows 10 из-за привязки портов

Ссылка действительно помогла объяснить и кажется наиболее подходящим способом решения проблемы. Отключение Hyper-V кажется излишним и дополнительным перезапуском.

beavel 06.06.2022 22:19

Попробуйте перезапустить "Host Network Service"

Это часто вызвано драйвером Windows NAT (winnat), остановка и перезапуск этой службы могут решить проблему.

откройте оболочку от имени администратора и введите эти команды:

  1. чистая остановка winnat.
  2. запуск докера...
  3. чистый старт

Этот ответ уже был предоставлен Cepr0 в прошлом году.

Christopher Richmond 10.06.2022 16:06
***net stop winnat
docker start container_name
net start winnat***

Написание этого в cmd сработало для меня, большое спасибо комментаторам за решение.

  1. беги net stop winnat
  2. Если вы используете рабочий стол docker, просто запустите контейнер. В противном случае запустите эту команду в командной строке: docker start <container_name>
  3. беги net start winnat

Мне пришлось отключить Windows IIS:

  • Панель управления вызовами > Программы и компоненты Нажмите Включить Windows включить или отключить функции Прокрутите вниз до Информационных служб Интернета

  • Нажмите на квадрат рядом с Информационными службами Интернета, чтобы он стал пустым.

  • Нажмите OK и перезагрузитесь, если требуется.

Смотрите https://superuser.com/questions/1377068/how-do-i-disable-the-iis-server-on-windows-10-and-free-up-port-80

Кроме того, мне пришлось включить Hyper-V вместе с Virtual Machine Platform и Windows Hypervisor Platform:

Другие вопросы по теме