Mac端口22被launchd占用,无法杀进程启动Docker容器怎么办?
关于Mac上22端口占用与Docker映射的问题解答
首先明确说:绝对不要尝试杀死PID为1的launchd进程——这是macOS的初始化进程,是系统所有其他进程的父进程,强行终止它会直接导致系统崩溃、强制重启,而且即使你用sudo kill -9也会因为系统核心保护机制无法执行,就像你遇到的“Operation not permitted”错误一样。
从你提供的进程信息来看,22端口被launchd监听,本质是因为Mac系统自带的远程登录(SSH)服务处于开启状态,launchd是负责管理这个系统服务的核心进程。
可行的解决方案有两个:
方案1:关闭系统自带的SSH服务,释放22端口
这是最直接的方式,操作步骤如下:
- 图形界面:打开「系统设置」→ 「通用」→ 「共享」,取消勾选「远程登录」选项,此时22端口会立即被释放。
- 命令行方式:执行以下命令关闭服务:
sudo systemsetup -setremotelogin off
关闭后再运行你的Docker命令:
docker run -it --name new_ubutu_ssh_container -p 22:22 ubuntu_ssh:23.04
就能正常映射端口了。如果之后需要重新开启系统SSH服务,再勾选「远程登录」或者执行sudo systemsetup -setremotelogin on即可。
方案2:修改Docker端口映射,避开22端口
如果你不想关闭系统的SSH服务,可以把容器的22端口映射到主机的其他空闲端口(比如2222),命令修改为:
docker run -it --name new_ubutu_ssh_container -p 2222:22 ubuntu_ssh:23.04
之后要连接容器内的SSH服务时,使用端口2222即可:
ssh localhost -p 2222
内容的提问来源于stack exchange,提问作者Sushant Thakur
相关产品推荐
相关产品推荐

