Windows Docker 端口占用错误解决

这篇具有很好参考价值的文章主要介绍了Windows Docker 端口占用错误解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Windows Docker 端口占用错误解决

错误来源

Error invoking remote method ‘docker-start-container’: Error: (HTTP code 500) server error - Ports are not available: exposing port TCP 192.168.0.157:6555 -> 0.0.0.0:0: listen tcp 192.168.0.157:6555: can’t bind on the specified endpoint.

或者

Error invoking remote method ‘docker-start-container’: error: (http code 500) server error - ports are not available.

或者

Error invoking remote method ‘docker-start-container’: Error: (HTTP code 500) server error - Ports are not available: listen tcp 0.0.0.0:xxxx: bind: An attempt was made to access a socket in a way forbidden by access permissions.

这些都是端口占用的问题,很多时候都是Windows会保留部分tcp端口,这些端口范围内不可用:

  • Windows 中个东西叫做“TCP 动态端口范围”,这个范围内的端口有时候会被一些服务占用。在 Windows Vista(或 Windows Server 2008)之前,动态端口范围是 1025 到 5000;在其之后的版本中,新的默认起始端口为 49152,新的默认结束端口为 65535。
  • 如果安装了 Hyper-V,则 Hyper-V 会保留一些随机端口号供 Windows 容器主机网络服务使用。
    一般情况(正常情况下)Hyper-V 会在“TCP 动态端口范围”中预留一些随机的端口号,但是预留的端口号一般都很大,所以即使预留了成百上千个端口,也影响不大。但是 Windows 自动更新有时会出错(万恶的自动更新),把“TCP 动态端口范围”起始端口被重置为 1024,导致 Hyper-V 在预留端口的时候占用了常用端口号,使得一些常用端口因为被预留而无法使用。

动态端口复用是 操作系统的常见技术
首先无论发送还是接受都需要监听端口
因为发送者的端口一般性无强制要求 只要不是 80 443 3306 3389 这类常见端口且有特殊意义端口就行 而且可以随着发送和收到返回后及时关闭方便其他程序进行复用
因此有了这项技术 这也是为什么大部分 http 库和浏览器不需要你指定自己发送端口的原因
同理 Linux 下中也有这项技术。

可以使用netsh int ipv4 show dynamicport tcp命令查看tcp动态端口范围:

Windows Docker 端口占用错误解决

使用netsh int ipv4 show excludedportrange protocol=tcp命令查看 tcp 端口排除范围:

Windows Docker 端口占用错误解决

解决方法

1. 直接重启

一般重启后Hyper-V的端口分配bug会消除,自然问题也会消失,但这不一定,偶尔会出现重启也解决不了的情况

2. 重新分配Hyper-V端口范围

简单地重新设置“TCP 动态端口范围”,以便 Hyper-V 只保留我们设置的范围内的端口。您可以通过以管理员权限运行以下命令将“TCP 动态端口范围”重置为 49152–65535,但如果您认为它太大,也可以将其更改为较小的范围。

请在命令行中执行下列命令设置动态端口范围:

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

然后重启电脑。

3. 不重启让Hyper-V重新随机分配端口

来自 StackOverflow 的错误解决方案:

net stop winnat
docker start container_name
net start winnat

这命令的实质是简化版的重启电脑,让 Hyper-V 初始化一些随机端口来保留,如果它仍然没有释放你所需要的端口,你可能需要再次操作。也就是因此,该回答下面有些人回复有用,有些人回复没用,就是因为这种解决方式解决问题的概率非常的随机。

参考文献

1:彻底解决docker在windows上的端口绑定问题

2:解决Windows下Docker启动容器时,端口被占用错误 - bkycmd - 博客园

3:docker - 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 - Stack Overflow

4:无法启动容器,提示端口无法使用,却查不到哪个进程占用?_UVE的博客-CSDN博客

如有疑问或错误,欢迎和我私信交流指正。
版权所有,未经授权,请勿转载!
Copyright © 2023 by Mr.Idleman. All rights reserved. 文章来源地址https://www.toymoban.com/news/detail-460950.html

到了这里,关于Windows Docker 端口占用错误解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决windows系统80端口被system占用问题

    80端口被 system (pid=4) 系统占用的解决方法, 80端口一般被当做网页服务器的默认端口,使用本机搭建服务器环境的时候,都会默认使用80端口来作为网页访问端,但是有的时候80端口会被其他的不明身份的程序占用,导致 Apache 启动失败,修改 Apache 的默认端口后访问本机地址

    2024年02月17日
    浏览(41)
  • 一文解决windows电脑端口被占用问题,专治疑难杂症和port xxxx was already in use 说再见

    使用windows开发的小伙伴肯定会经常遇到如下图这种情况,这个时候我们最简单的解决方案就是重启,一般重启就能搞定这个问题,但是吧每次重启需要开一大堆软件,比较麻烦,接下来我们将通过 2种方案 解决端口被占用的情况: 1.1 找出端口被哪个线程占用 1.2 查询这个进

    2024年02月08日
    浏览(39)
  • Windows 查看端口占用情况 & 80端口被占用处理方法

    一 . 用netstat指令查看是端口占用情况 查看所有端口的占用情况 命令格式:netstat [options] -a表示显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。 -n表示只以数字形式显示所有活动的TCP连接的地址和端口号。 -o表示显示活动的TCP连接并包括每个连接的进程ID(PID)。

    2024年02月06日
    浏览(38)
  • windows端口占用关闭指定端口

    1、查看windows端口进程 点击开始菜单选择运行(win+r),接着在运行对话框中输入“cmd”,回车打开命令提示符窗口,然后在窗口中输入【netstat -aon|findstr “端口”】,回车之后就可以看见列表中的PID。 2、得到端口进程ID:XXX,继续输入命令【tasklist|findstr “XXX”】,回车查

    2024年02月11日
    浏览(31)
  • Windows如何查看本地端口占用及Kill占用端口的线程?

    1. Windows查看本地端口占用 1.1 查看本地占用的全部端口 可以看到本地全部端口的占用情况; 1.2 查看指定端口的占用情况 可以看到我的8097端口被 pid = 3716的进程占用; 1.3 netstat命令详解 参考官方网站:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/netstat 2. ki

    2024年02月03日
    浏览(32)
  • windows端口占用

    1.查看当前端口被哪个进程占用了(进入到CMD中) 输出结果为: TCP 127.0.0.1:8990 0.0.0.0:0 LISTENING 2700 我们发现8990端口被2700进程占用了 2.基于进程号找进程名称 输出结果为: kxescore.exe 2700 Services 0 29,284 K 可以去任务管理器停止kxescore.exe应用 https://zhhll.icu/2020/windows/windows之端口占

    2024年02月14日
    浏览(33)
  • Windows下查看端口占用情况

    编程的时候经常发现我们需要使用的端口被别的程序占用,这个时候需要清楚查看是哪个程序占用了端口,用且清除了这个进程! 1、开始----运行----cmd,或者是window+R组合键,调出命令窗口: 2、输入命令: netstat -ano ,列出 所有端口的情况 。在列表中我们观察被占用的端口

    2024年02月03日
    浏览(31)
  • Windows系统如何查看占用的端口

      在有些时候,我们需要知道Windows系统占用了那些端口。比如,需要在服务器上部署一个应用程序时,需要给这个应用程序提供空闲端口用来通信。除了一些约定俗成的端口外,例如,HTTP服务占用80端口,FTP服务占用221端口等。其它的端口如何确定是否被占用哪。 可以通

    2024年02月16日
    浏览(31)
  • windows下如何查看端口占用情况?

    开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选\\\"查看\\\"-\\\"选择列\\\"         经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道

    2024年02月06日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包