Windows10下docker-compose up报"Problem occurred while listening on port xxxx"端口绑定错误的解决方法
发布于 2 个月前 作者 QinHuoBin 193 次浏览 来自 分享

这几天在新电脑上安装QUANTAXIS时遇到这个问题,经过一番探索后成功解决,下面言简意赅地分享我的经验 环境:Windows 10(2004专业版)、Docker Desktop(使用WSL 1,所以打开了Hyper-v)

###0x00报错信息

Problem occurred while listening on port xxxx(这里xxxx可能是81 3001 5672等等等等) … An attempt was made to access a socket in a way forbidden by its access permissions

然后某个容器无法运行(提示有ERROR)

###0x01问题朔源 cmd下输入netsh int ipv4 show excludedportrange protocol=tcp 图解:端口被系统“保留”(注:为方便演示,图像经过大幅度加工处理,以你自己的为准) 你会发现xxxx端口就在某个被保留的范围内,所以docker无法绑定这个端口 这些“保留端口”大部分是启用了Hyper-v导致的,原因未明(欢迎知道原因的大神在下方留言~)

###0x02问题修复 准备:复制下面代码,保存为bat批处理(方便后续操作),这几行命令的作用是把那个宝贵的docker-compose.yaml中所有要开的端口添加到你自己的保留规则里面

netsh int ipv4 add excludedportrange protocol=tcp startport=8888 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=81 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=8787 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=8010 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=27017 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=15672 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=5672 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=4369 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=61209 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=61208 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=8011 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=8020 numberofports=1 netsh int ipv4 add excludedportrange protocol=tcp startport=3001 numberofports=1 pause

①关闭Hyper-v并重启计算机(如果不执行这一步,第二步会提示“拒绝访问”,无法解决问题) ②右键上面的批处理文件,点击“以管理员身份运行” ③仔细检查每一个命令的执行结果是否都为“确定”,如果不是,则重复①②步,直到那些未成功执行的命令,执行结果为“确定”(这是因为重启后,有的端口还是被保留,需要再次重启才能释放,原因未知) ④再次netsh int ipv4 show excludedportrange protocol=tcp,你会发现原本被占用的端口后面多了个星号,这些是你自己保留的,Hyper-v就不会保留这些端口了 图解:(注:图片截去了大半部分以方便演示,实际带*的端口应比图中的要多) ⑤启用Hyper-v并重启计算机,docker-compose up -d拉起QUANTAXIS,一片绿灯无报错,问题解决

###0x03参考 https://blog.sixthimpulse.com/2019/01/docker-for-windows-port-reservations/ https://segmentfault.com/a/1190000022338199

希望这篇文章能帮到你。本人才疏学浅,如有错误尽管指出,谢谢!

回到顶部