【保姆级教程】解决 WSL 下 codex login 报错 Port 1455 is already in use (深度解析在 .wslconfig 配置镜像网络模式后出现的大坑)

2026-04-11 13:321阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

1. 问题背景:一个诡异的端口占用

最近在体验 Codex,打算在我的 WSL (Ubuntu) 环境下进行授权登录。我的本地环境比较特殊,为了解决一些代理和 IPv6 的问题,我在宿主机的 %USERPROFILE%\.wslconfig 中开启了 WSL2 的镜像网络模式

image404×248 8.46 KB

结果,当我在终端敲下 codex login 时,反复报这个错:

image973×245 3.96 KB

1455 端口为什么会被占用呢?接下来的排查过程,可以说是踩了个连环坑。


2. 踩坑记录一:在 Linux 里“跨服执法”

遇到端口占用,去网上一搜,大量教程(甚至 AI)都会告诉你:这是 Windows 的 NAT 服务占用了,跑这两行命令重启服务就好:

net stop winnat net start winnat

如果你直接把这两行代码复制到了 WSL 的终端里,那你大概率会看到下面这个搞笑的画面:

image852×273 4.11 KB

image878×267 4.28 KB

避坑提示:

千万别忘了你现在身处 WSL(Linux 环境)!在 Linux 中,net 是用来管理 Samba 网络共享的工具。网上的 net stop winnatWindows 系统的专属命令。在 Linux 终端里去关 Windows 的服务,纯属“跨服执法”,毫无作用。


3. 踩坑记录二:查无此人的 lsof 与镜像模式的真相

既然不能跨服执法,那我用 Linux 自带的神器 lsof 查一下到底是哪个进程占用了 1455 端口总行了吧?

lsof -i :1455

结果按下回车,终端没有任何输出

image945×318 7.63 KB

Linux 内部查不到任何占用,但运行程序却死活报端口被占。这到底是怎么回事?

破案关键:被忽视的 networkingMode=mirrored

此时我才恍然大悟,罪魁祸首正是我自己配置的镜像网络模式(Mirrored Mode)

在默认的 NAT 模式下,WSL 有自己独立的虚拟网络和 IP。但在开启 mirrored 模式后,WSL 的网络栈与 Windows 宿主机彻底融为一体,它们在物理意义上共享了同一个 localhost

真相大白:占用 1455 端口的进程,其实卡死在外面的 Windows 系统里!(大概率是之前未正常退出的 Codex 后台进程)。

因为网络底层打通了,Linux 去请求 1455 端口时,直接撞上了 Windows 端的占用墙,从而报错。而 lsof 只能扫描 Linux 自己内部的进程管理器,它对 Windows 里的进程是个“瞎子”,自然什么都查不到。


4. 终极解决方案:回到 Windows 物理超度

理清了镜像网络的底层逻辑,解决起来就非常简单了:回 Windows 老家,干掉那个“钉子户”!

第一步:打开 Windows 管理员终端

按下键盘 Win 键,搜索 PowerShellCMD右键选择“以管理员身份运行”

第二步:揪出占用端口的 Windows 进程 PID

在管理员窗口中,执行以下命令查找 1455 端口的占用者:

netstat -ano | findstr :1455

image1266×408 18.6 KB

第三步:强制击杀该进程

拿到 PID 后,直接使用 taskkill 命令将其物理超度(注意将下方的 你的PID 替换为你刚刚查出的数字):

taskkill /PID 你的PID /F

image1278×267 7.25 KB

(补充说明:如果你在这步没查到具体的 PID,说明可能是 Windows 系统的 NAT 服务动态保留了该端口,此时在管理员窗口执行一次 net stop winnatnet start winnat 即可释放。)


5. 见证奇迹的时刻

清理掉 Windows 端的障碍后,我们再次回到 WSL 的 Linux 终端中,重新输入登录命令:

codex login

顺利弹出浏览器,授权秒过,世界终于清净了!
image854×524 5.75 KB

image1014×582 9.38 KB

image872×631 5.94 KB

课后总结

如果你也开启了 WSL2 的 networkingMode=mirrored,请务必记住这个两栖排雷法则

由于子系统和宿主机 1:1 共享了 Localhost,遇到端口冲突时,如果 Linux 里的 lsof 查不到,凶手一定在 Windows 里! 直接去 Windows 管理员终端用 netstat 查 PID 并 taskkill,简单粗暴最有效。

希望这篇硬核踩坑记录能帮到折腾 WSL 网络的大家,少走弯路!欢迎点赞收藏~

网友解答:
--【壹】--:

感谢大佬 !


--【贰】--:

对的。WSL默认是不共享端口的。我在.wslconfig进行了镜像网络模式配置,所以才会端口共享。


--【叁】--:

额……emmmm


--【肆】--: CHEN:

但在开启 mirrored 模式后,WSL 的网络栈与 Windows 宿主机彻底融为一体,它们在物理意义上共享了同一个 localhost

大师我悟了
虽然还没遇到,但是以防万一先记一下


--【伍】--:

祈祷你别遇到哈哈哈,我折腾了半天才弄好,赶快来记录一下。


--【陆】--:

关于networkingMode=mirroredautoProxy=true的区分(来源GPT 5.4 Thinking)
image2031×2057 188 KB


--【柒】--:

也是一个经验 很有用 也就是说端口是共享的

问题描述:

1. 问题背景:一个诡异的端口占用

最近在体验 Codex,打算在我的 WSL (Ubuntu) 环境下进行授权登录。我的本地环境比较特殊,为了解决一些代理和 IPv6 的问题,我在宿主机的 %USERPROFILE%\.wslconfig 中开启了 WSL2 的镜像网络模式

image404×248 8.46 KB

结果,当我在终端敲下 codex login 时,反复报这个错:

image973×245 3.96 KB

1455 端口为什么会被占用呢?接下来的排查过程,可以说是踩了个连环坑。


2. 踩坑记录一:在 Linux 里“跨服执法”

遇到端口占用,去网上一搜,大量教程(甚至 AI)都会告诉你:这是 Windows 的 NAT 服务占用了,跑这两行命令重启服务就好:

net stop winnat net start winnat

如果你直接把这两行代码复制到了 WSL 的终端里,那你大概率会看到下面这个搞笑的画面:

image852×273 4.11 KB

image878×267 4.28 KB

避坑提示:

千万别忘了你现在身处 WSL(Linux 环境)!在 Linux 中,net 是用来管理 Samba 网络共享的工具。网上的 net stop winnatWindows 系统的专属命令。在 Linux 终端里去关 Windows 的服务,纯属“跨服执法”,毫无作用。


3. 踩坑记录二:查无此人的 lsof 与镜像模式的真相

既然不能跨服执法,那我用 Linux 自带的神器 lsof 查一下到底是哪个进程占用了 1455 端口总行了吧?

lsof -i :1455

结果按下回车,终端没有任何输出

image945×318 7.63 KB

Linux 内部查不到任何占用,但运行程序却死活报端口被占。这到底是怎么回事?

破案关键:被忽视的 networkingMode=mirrored

此时我才恍然大悟,罪魁祸首正是我自己配置的镜像网络模式(Mirrored Mode)

在默认的 NAT 模式下,WSL 有自己独立的虚拟网络和 IP。但在开启 mirrored 模式后,WSL 的网络栈与 Windows 宿主机彻底融为一体,它们在物理意义上共享了同一个 localhost

真相大白:占用 1455 端口的进程,其实卡死在外面的 Windows 系统里!(大概率是之前未正常退出的 Codex 后台进程)。

因为网络底层打通了,Linux 去请求 1455 端口时,直接撞上了 Windows 端的占用墙,从而报错。而 lsof 只能扫描 Linux 自己内部的进程管理器,它对 Windows 里的进程是个“瞎子”,自然什么都查不到。


4. 终极解决方案:回到 Windows 物理超度

理清了镜像网络的底层逻辑,解决起来就非常简单了:回 Windows 老家,干掉那个“钉子户”!

第一步:打开 Windows 管理员终端

按下键盘 Win 键,搜索 PowerShellCMD右键选择“以管理员身份运行”

第二步:揪出占用端口的 Windows 进程 PID

在管理员窗口中,执行以下命令查找 1455 端口的占用者:

netstat -ano | findstr :1455

image1266×408 18.6 KB

第三步:强制击杀该进程

拿到 PID 后,直接使用 taskkill 命令将其物理超度(注意将下方的 你的PID 替换为你刚刚查出的数字):

taskkill /PID 你的PID /F

image1278×267 7.25 KB

(补充说明:如果你在这步没查到具体的 PID,说明可能是 Windows 系统的 NAT 服务动态保留了该端口,此时在管理员窗口执行一次 net stop winnatnet start winnat 即可释放。)


5. 见证奇迹的时刻

清理掉 Windows 端的障碍后,我们再次回到 WSL 的 Linux 终端中,重新输入登录命令:

codex login

顺利弹出浏览器,授权秒过,世界终于清净了!
image854×524 5.75 KB

image1014×582 9.38 KB

image872×631 5.94 KB

课后总结

如果你也开启了 WSL2 的 networkingMode=mirrored,请务必记住这个两栖排雷法则

由于子系统和宿主机 1:1 共享了 Localhost,遇到端口冲突时,如果 Linux 里的 lsof 查不到,凶手一定在 Windows 里! 直接去 Windows 管理员终端用 netstat 查 PID 并 taskkill,简单粗暴最有效。

希望这篇硬核踩坑记录能帮到折腾 WSL 网络的大家,少走弯路!欢迎点赞收藏~

网友解答:
--【壹】--:

感谢大佬 !


--【贰】--:

对的。WSL默认是不共享端口的。我在.wslconfig进行了镜像网络模式配置,所以才会端口共享。


--【叁】--:

额……emmmm


--【肆】--: CHEN:

但在开启 mirrored 模式后,WSL 的网络栈与 Windows 宿主机彻底融为一体,它们在物理意义上共享了同一个 localhost

大师我悟了
虽然还没遇到,但是以防万一先记一下


--【伍】--:

祈祷你别遇到哈哈哈,我折腾了半天才弄好,赶快来记录一下。


--【陆】--:

关于networkingMode=mirroredautoProxy=true的区分(来源GPT 5.4 Thinking)
image2031×2057 188 KB


--【柒】--:

也是一个经验 很有用 也就是说端口是共享的