端口不可用:侦听 tcp 0.0.0.0/50070:绑定:尝试以其访问权限禁止的方式访问套接字

Ports are not available: listen tcp 0.0.0.0/50070: bind: An attempt was made to access a socket in a way forbidden by its access permissions

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

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

最后出现以下错误。

docker: error response from daemon: Ports are not available: listen tcp 0.0.0.0/50070: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

据我了解,错误是由于端口 50070 被另一个进程使用。我试图识别该进程,以便在命令提示符下使用以下命令将其终止,但它既不提供输出也不提供错误。

netstat -ano | findstr :50080

根据 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

This 解决方案帮助了我:

net stop winnat
docker start container_name
net start winnat

在我的本地计算机上,Docker 桌面和集成启用了类似的问题 Debian/Ubuntu 设置为默认发行版(WSL2 作为所有标准)。我是如何解决的:

  • Docker 设置已禁用“登录时启动 Docker 桌面”
  • 正在重启Windows
  • 先发Debian/Ubuntu
  • 然后启动Docker桌面

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

  • net stop winnat
  • 网络启动winnat

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

这对我有用。

我在 VPN 连接处于活动状态时遇到过这种情况。
您可以暂时断开您的 VPN 连接,然后启动您的 docker container,然后返回并再次连接到您的 VPN

重启winnat不是个好办法,根本原因是windows的一些端口是动态保留的,即使不是occupied.This命令也可以解决[=12] =]

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

这篇文章解释的很详细,推荐看一看

Completely solve the problem of docker containers running on Windows 10 due to port binding

尝试重新启动“主机网络服务”

这通常是由 Windows NAT 驱动程序 (winnat) 引起的,停止并重新启动该服务可能会解决问题。

以管理员身份打开 shell,然后键入以下命令:

  1. net stop winnat.
  2. docker开始...
  3. 网络启动winnat