端口不可用:listen tcp 0.0.0.0/50070:bind:尝试以访问权限禁止的方式访问套接字

sae*_*p23 24 port hadoop docker docker-image

我正在尝试使用以下命令启动 docker 容器。

docker run -it -p 50070:50070 -p 8088:8088 -p 8080:8080 suhothayan/hadoop-spark-pig-hive:2.9.2 bash
Run Code Online (Sandbox Code Playgroud)

它最终出现了以下错误。

docker:来自守护进程的错误响应:端口不可用:listen tcp 0.0.0.0/50070:bind:尝试以访问权限禁止的方式访问套接字。

据我了解,由于另一个进程使用了​​端口 50070,因此发生了错误。我试图识别该进程,以便在命令提示符下使用以下命令终止该进程,但它既没有给出输出也没有给出错误。

netstat -ano | findstr :50080
Run Code Online (Sandbox Code Playgroud)

Cep*_*pr0 80

这个解决方案帮助了我:

net stop winnat
docker start ...
net start winnat
Run Code Online (Sandbox Code Playgroud)

  • 这并不能解释为什么事情会失败。 (22认同)
  • 是的,这解决了我的端口问题。 (5认同)
  • 最简单的解决方案!谢谢 (2认同)
  • 谢谢它帮助了我。我遇到了同样的错误,我在 Windows powershell 的管理员模式下运行了第一个命令(net stop winnat),然后运行了(docker-compose up --build -d),最后我运行了最后一个命令(net start温纳特)。 (2认同)

San*_*eep 20

根据 Windows https://github.com/docker/for-win/issues/3171 的Docker 问题:

您可能在命令的任何排除的端口范围中拥有该端口 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


小智 12

我这样做是为了停止 tcp 进程 =>

  • 净停止赢
  • 净启动winnat

这样,忙端口操作就结束了。

这对我有用。

  • 谢谢你!这个在 Windows 10 中对我有用。 (2认同)

Ech*_*man 12

重新启动winnat并不是一个好主意。根本原因是Windows的某些端口被动态保留,即使它们没有被占用。可以用这个命令来解决。

netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384
Run Code Online (Sandbox Code Playgroud)

这篇文章讲解的很详细,推荐看一下:
彻底解决Windows 10上docker容器运行由于端口绑定的问题

  • 该链接确实有助于解释,并且似乎是解决问题的最合适方法。禁用 Hyper-V 似乎有点矫枉过正,并且需要额外重启。 (3认同)