在 win10 中安装 Docker 启动容器时报错如下:
PS C:\Users\12547\tb-server-docker> docker-compose up -d
Creating network "tb-server-docker_default" with the default driver
Creating tb-server-docker_zookeeper_1 ... done
Creating tb-server-docker_kafka_1 ... done
Creating tb-server-docker_mytb_1 ... error
ERROR: for tb-server-docker_mytb_1 Cannot start service mytb: Ports are not available: listen tcp 0.0.0.0:1883: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
ERROR: for mytb Cannot start service mytb: Ports are not available: listen tcp 0.0.0.0:1883: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
ERROR: Encountered errors while bringing up the project.
根据错误提示是端口被占用了,使用如下命令查看本机监听端口信息,然而查询结果为空。
netstat -aon|findstr "1883"
通过查找资料,在 stackoverflow 上面找到了问题原因和解决方法。StackOverFlow 解决方案
报错原因: 详细原因点这里,简要的说就是 Hyper-V
排除了一些范围的端口号,而我们要绑定监听的端口号例如我这里使用的 1883
就在其中。具体被排除的范围可以使用如下命令查看:
C:\Users> netsh interface ipv4 show excludedportrange protocol=tcp
协议 tcp 端口排除范围
开始端口 结束端口
---------- --------
1029 1128
1229 1328
1329 1428
1429 1528
1529 1628
1629 1728
1729 1828
1855 1954
2202 2301
2357 2456
2557 2656
2657 2756
2757 2856
2869 2869
2957 3056
3057 3156
3157 3256
4628 4727
4728 4827
50000 50059 *
* - 管理的端口排除。
可以发现我要绑定的 1883
端口就在 1855 - 1954
范围内.
解决方法: 打开管理员模式 Windows PowerShell
,执行下面命令重启 NAT 驱动服务即可。
PS C:\WINDOWS\system32> net stop winnat
Windows NAT Driver 服务已成功停止。
PS C:\WINDOWS\system32> net start winnat
Windows NAT Driver 服务已经启动成功。