我正在尝试使用以下命令启动 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
这个解决方案帮助了我(以管理员身份运行你的终端):
net stop winnat
docker start container_name
net start winnat
我这样做是为了停止 tcp 进程 =>
这样,繁忙的端口操作就终止了。
这对我有用。
根据 Windows 的 Docker 问题 https://github.com/docker/for-win/issues/3171 :
您可能在命令的任何排除端口范围内都有该端口
netsh interface ipv4 show excludedportrange protocol=tcp
您可以使用上述票证中提到的解决方案。
禁用 hyper-v(这需要重新启动几次)
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
完成所有必需的重新启动后,保留所需的端口,这样 hyper-v 就不会保留它了
netsh int ipv4 add excludedportrange protocol=tcp startport=50070 numberofports=1
重新启用 hyper-V(这需要重新启动几次)
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
重新启动
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容器因端口绑定问题
当我的 VPN 连接处于活动状态时,我遇到了这种情况。
您可以暂时断开您的 VPN 连接,然后启动您的
docker container
,然后返回并再次连接到您的 VPN
net stop winnat
docker start <container_name>
net start winnat
在我的本地计算机上,Docker Desktop 也有类似的问题,并且启用了与 Debian/Ubuntu 设置为默认发行版(WSL2 作为所有标准发行版)的集成。我是如何解决的:
这通常是由 Windows NAT 驱动程序 (winnat) 引起的,停止并重新启动该服务可能会解决该问题。
以管理员身份打开 shell,然后键入这些命令:
我必须禁用 Windows IIS:
此外,我必须启用
Hyper-V
以及 Virtual Machine Platform
和 Windows Hypervisor Platform
:
尝试重新启动“主机网络服务”
***net stop winnat
docker start container_name
net start winnat***
在 cmd 中编写此内容对我来说效果很好,非常感谢评论者提供的解决方案。