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)
San*_*eep 20
根据 Windows https://github.com/docker/for-win/issues/3171 的Docker 问题:
您可能在命令的任何排除的端口范围中拥有该端口 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
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容器运行由于端口绑定的问题