You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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端口,这时候去系统设置里关掉它:

  1. 打开「系统设置」→「通用」→「AirDrop 与接力」
  2. 找到「AirPlay 接收器」,把开关关掉

验证解决效果

搞定之后再运行你原来的命令:

docker container run --publish 80:80 nginx

这时候应该能正常启动Nginx,访问http://localhost就能看到熟悉的Nginx欢迎页啦!

内容的提问来源于stack exchange,提问作者hxhking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:45:47