最近升级了windows系统,一切都很正常,但是在重新启动 mysql 容器的时候,却报错说试图访问没权限的端口:

ERROR: for mysql Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

当时就很纳闷,明明刚刚还好的,我只是重新构建而已,怎么就这样了呢。最后找的解决方案见 https://github.com/docker/for-win/issues/3171#issuecomment-572571882

总结如下,首先可能导致的原因是更新系统或某个软件导致系统可用端口范围变更,常用的端口被排除在外,那么只需要把端口范围改下,即可,步骤如下:

  • 运行 netsh int ipv4 show dynamicport tcp 查看端口范围,确认是否该问题,可以运行 netsh int ipv4 show excludedportrange protocol=tcp 查看更详细的信息
  • 运行 netsh int ipv4 set dynamic tcp start=49152 num=1638 重置端口
  • 运行 reg add HKLM\SYSTEM\CurrentControlSet\Services\hns\State /v EnableExcludedPortRange /d 0 /f
  • 最后 重启系统