docker 启动容器报错: (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.
问题排查
-
检查端口是否被其它程序占用:
netstat -ano | findstr 6379
,如果有需要自己处理一下,关掉冲突程序或改端口 -
如果本地端口没有被占用,检查是否是与hyper-v保留端口冲突了
查看hyper-v启动后的保留端口范围netsh interface ipv4 show excludedportrange protocol=tcp
协议 tcp 端口排除范围 开始端口 结束端口 ---------- -------- 1026 1125 1226 1325 1326 1425 1426 1525 1526 1625 2180 2279 6220 6420 ...
结果显示6220~6420端口被保留,其中包括了redis的6379端口,需要修改修改hyper-v保留端口,排除6379文章来源:https://www.toymoban.com/news/detail-700144.html
修改hyper-v保留端口
- 以管理员身份运行 powershell
- 停止Windows NAT 驱动程序
net stop winnat
- 使用以下命令永久排除6379作为保留端口
netsh int ipv4 add excludedportrange protocol=tcp startport=6379 numberofports=1 store=persistent
提示:关键在于store=persistent参数表示持久化信息
上面的命令可以通过修改numberofports参数保留startport开始的多个端口 - 开启Windows NAT 驱动程序
net start winnat
- 再次运行 netsh interface ipv4 show excludedportrange protocol=tcp 命令可以看到6379端口已被排除(带有*号标记)
管理员权限运行协议 tcp 端口排除范围 开始端口 结束端口 ---------- -------- 80 80 2379 2379 * 2380 2380 * 3306 3306 * 5357 5357 6379 6379 * 50000 50059 * * - 管理的端口排除。
其他端口号被占用同理,上面我排除了mysql、redis、etcd的端口,常用的都可以加上文章来源地址https://www.toymoban.com/news/detail-700144.html
参考资料:
- https://www.cnblogs.com/codeninja/p/14759920.html
- https://www.cnblogs.com/uncmd/p/16056993.html
到了这里,关于windows docker 容器启动报错:Ports are not available的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!