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

问题描述 投票:0回答:12

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

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:绑定:尝试以访问权限禁止的方式访问套接字。

据我了解,错误是由于端口 50070 被另一个进程使用而发生的。我尝试识别该进程,以便在命令提示符中使用以下命令杀死该进程,但它没有给出输出,也没有给出错误。

netstat -ano | findstr :50080
docker hadoop port docker-image
12个回答
283
投票

这个解决方案帮助了我(以管理员身份运行你的终端):

net stop winnat
docker start container_name
net start winnat

92
投票

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

  • 停止winnat
  • 网络启动winnat

这样,繁忙的端口操作就终止了。

这对我有用。


50
投票

根据 Windows 的 Docker 问题 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


11
投票

重新启动

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

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

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


4
投票

当我的 VPN 连接处于活动状态时,我遇到了这种情况。
您可以暂时断开您的 VPN 连接,然后启动您的

docker container
,然后返回并再次连接到您的 VPN


4
投票
  1. 奔跑
    net stop winnat
  2. 如果您使用docker桌面,只需运行容器即可。否则在命令提示符下运行此命令:
    docker start <container_name>
  3. 奔跑
    net start winnat

2
投票

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

  • Docker 设置禁用了“登录时启动 Docker Desktop”
  • 重新启动Windows
  • 首次启动 Debian/Ubuntu
  • 然后启动 Docker Desktop

2
投票

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

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

  1. 停止winnat。
  2. docker启动...
  3. 网络启动winnat

2
投票

我必须禁用 Windows IIS:

  • 呼叫控制面板 > 程序和功能单击“打开 Windows” 打开或关闭功能向下滚动至互联网信息服务

  • 单击“互联网信息服务”旁边的方框,使其变为空

  • 单击“确定”并根据需要重新启动。

参见 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
:


1
投票

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


0
投票
***net stop winnat
docker start container_name
net start winnat***

在 cmd 中编写此内容对我来说效果很好,非常感谢评论者提供的解决方案。


0
投票
  1. 打开 docker-compose.yaml 文件。
  2. 找到发生端口冲突的服务定义。
  3. 在该服务中,将 HOST_PORT 留空。这将允许 Docker 在每次容器启动时动态生成端口。

举个例子,

您可以通过 Docker Desktop 或运行 docker-compose ps 检查动态分配的端口。

© www.soinside.com 2019 - 2024. All rights reserved.