【保姆级教程】解决 WSL 下 codex login 报错 Port 1455 is already in use (深度解析在 .wslconfig 配置镜像网络模式后出现的大坑)
- 内容介绍
- 文章标签
- 相关推荐
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 winnat 是 Windows 系统的专属命令。在 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 键,搜索 PowerShell 或 CMD,右键选择“以管理员身份运行”。
第二步:揪出占用端口的 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 winnat 和 net 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=mirrored和autoProxy=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 winnat 是 Windows 系统的专属命令。在 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 键,搜索 PowerShell 或 CMD,右键选择“以管理员身份运行”。
第二步:揪出占用端口的 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 winnat 和 net 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=mirrored和autoProxy=true的区分(来源GPT 5.4 Thinking)
image2031×2057 188 KB
--【柒】--:
也是一个经验 很有用 也就是说端口是共享的

