ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

解决Windows下Docker启动容器时,端口被占用错误

2022-03-25 22:33:12  阅读:781  来源: 互联网

标签:Hyper Windows 保留 端口 tcp 排除 6379 Docker


今天在启动本机的redis容器时报了如下错误:

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

我的环境信息

  • Windows版本: Windows 11 专业版
  • Docker Desktop Version: 4.3.2
  • 启用Hyper-V 和 WSL2

查找问题

首选确保本机端口是否被占用,使用如下命令:

netstat -ano | findstr 6379

结果端口没有被占用

查资料之后发现 Hyper-V 会保留部分tcp端口,开始到结束范围内的端口不可用, 使用如下命令查看保留的端口:

netsh interface ipv4 show excludedportrange protocol=tcp

可以得到

协议 tcp 端口排除范围

开始端口    结束端口
----------    --------
      1026        1125
      1126        1225
      1226        1325
      1326        1425
      1426        1525
      1538        1637
      2327        2426
      2427        2526
      2527        2626
      2627        2726
      2727        2826
      2827        2926
      6344        6567
     50000       50059     *
     50070       50070     *

* - 管理的端口排除。

可以看到6379在排除范围内

解决办法

此时可以修改容器启动命令(主要是修改端口)重新启动容器。

这种是绕过了被保留的端口, 如果你的程序一定要使用范围内的端口,有如下三种方式

一、临时关闭Hyper-V

  1. 临时关闭Hyper-V

  2. 配置端口

  3. 恢复Hyper-V

二、重启电脑大法

保留的端口是随机的,每次重启电脑都会改变,因此可以通过重启电脑来解决。

三、永久排除保留端口

1、在运行 Docker 之前,以管理员身份运行 powershell

2、使用以下命令永久排除6379作为保留端口(如果端口被占用需要重启一次电脑)

netsh int ipv4 add excludedportrange protocol=tcp startport=6379 numberofports=1 store=persistent

提示:上面的命令可以通过修改numberofports参数保留startport开始的多个端口

3、再次运行 netsh interface ipv4 show excludedportrange protocol=tcp 命令可以看到6379端口已被排除(带有*号标记)

协议 tcp 端口排除范围

开始端口    结束端口
----------    --------
      1026        1125
      1126        1225
      1226        1325
      1326        1425
      1426        1525
      1538        1637
      2327        2426
      2427        2526
      2527        2626
      2627        2726
      2727        2826
      2827        2926
      6379        6379     *
     50000       50059     *
     50070       50070     *

* - 管理的端口排除。

之后再重启电脑6379端口就不会包含在保留端口内了。

总结

三种解决方法中,第一种临时关闭Hyper-V可以避免重启电脑,可以作为紧急解决办法。第二种重启电脑需要靠运气,第三种永久排除保留端口是最高效的。

标签:Hyper,Windows,保留,端口,tcp,排除,6379,Docker
来源: https://www.cnblogs.com/uncmd/p/16056993.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有