WSL和宿主Windows主机端口冲突的问题
在之前使用Gatsby和Ghost搭建静态博客系统的时候因为宿主电脑Win10的NodeJS是13.x的无法安装Ghost,所以将Ghost安装在WSL的Ubuntu上了,然后宿主中分别访问而Gatsby和Ghost都相安无事互不冲突,之所以它俩能并存也是因为占用了两个不同的端口,后来脑洞大开如果在Ubuntu上安装了宿主电脑上存在的服务会怎样?于是我接着在WSL中又装了诸如nginx、mysql、mongodb这些服务,但是发现在宿主电脑的这些服务的客户端中按照标准端口连接的时候依然是宿主电脑的服务,而不是WSL的Ubuntu。
于是我在Google爬了很多信息,最后得出的结论是:
WSL和Win10共享同一套端口,如果出现两者监听同一个端口的情况,Windows主系统的程序拥有更高的优先级。也就是说,如果我们在WSL运行需要监听端口的程序,必须确认该端口没有被Windows主系统内的任何程序占用。如果出现冲突,请参阅软件相关文档修改默认配置。
例如,在WSL中安装SSH Server
时,端口冲突将会导致WSL不能按照预期通过SSH连接登陆,但只需修改默认WSL的SSH监听端口,问题便迎刃而解。