Mac运行Docker Nginx报错Bind for 0.0.0.0:80(EADDRINUSE)如何解决?
解决Mac上Docker启动Nginx时80端口被占用的问题
Hey,这个错误太常见了——本质就是你的Mac上已经有进程占用了80端口,Docker没法绑定这个端口对外提供服务。我给你几个实用的解决办法,按需选择就行:
1. 先找出占用80端口的进程
首先得搞清楚是谁占了端口,Mac上用lsof命令最直观:
lsof -i :80
执行后会输出类似这样的内容:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 1234 root 4u IPv6 0xabcdef1234567890 0t0 TCP *:http (LISTEN)
重点看PID列(进程ID)和COMMAND列(进程名),就能定位到占用端口的程序。
2. 针对性解决端口占用问题
方案A:关掉占用端口的进程
如果是你自己启动的服务(比如本地Apache、其他Nginx实例),直接终止它就行:
- 要是系统自带的Apache,用这个命令停止:
sudo apachectl stop - 要是其他进程,用PID强制终止:
把sudo kill -9 <你的PID><你的PID>换成刚才lsof输出里的数字即可。
方案B:修改Docker的端口映射(不用80端口)
如果不想关掉现有进程,换个主机端口映射就行,比如把主机的8080端口映射到容器的80:
docker container run --publish 8080:80 nginx
启动后访问http://localhost:8080就能看到Nginx的欢迎页面了。
方案C:处理系统进程占用(比如AirPlay接收器)
有时候Mac的AirPlay Receiver会悄悄占用80端口,这时候去系统设置里关掉它:
- 打开「系统设置」→「通用」→「AirDrop 与接力」
- 找到「AirPlay 接收器」,把开关关掉
验证解决效果
搞定之后再运行你原来的命令:
docker container run --publish 80:80 nginx
这时候应该能正常启动Nginx,访问http://localhost就能看到熟悉的Nginx欢迎页啦!
内容的提问来源于stack exchange,提问作者hxhking
相关产品推荐
相关产品推荐

