一、问题场景

在 Mac 上的 docker 配置项目下执行以下命令:

docker-compose up

提示以下错误:

ERROR: for nginx  Cannot start service nginx: Ports are not available: 
listen tcp 0.0.0.0:80: bind: address already in use

二、问题原因

通过以上错误提示发现 80 端口已经被占用,看一下被谁占用了:

bash-3.2# lsof -i :80

COMMAND  PID       USER   FD   TYPE         DEVICE SIZE/OFF NODE NAME
httpd    117       root    4u  IPv6 0x56      0t0  TCP *:http (LISTEN)
httpd    371       _www    4u  IPv6 0x56      0t0  TCP *:http (LISTEN)
httpd   2452       _www    4u  IPv6 0x56      0t0  TCP *:http (LISTEN)
httpd   2455       _www    4u  IPv6 0x56      0t0  TCP *:http (LISTEN)
httpd   2456       _www    4u  IPv6 0x56      0t0  TCP *:http (LISTEN)
httpd   5443       _www    4u  IPv6 0x56      0t0  TCP *:http (LISTEN)

发现是 Apache 占用了 80 端口。

我的系统是:MacOS Catalina 10.15.4(不确定是不是升级新系统的原因),开机后会自动启动 Apacha,这个会自动占用 80 端口,如果想启动 Nginx 监听 80 端口,必须停掉 Apacha。

三、解决方案

使用以下命令可以停掉 Apacha:

sudo apachectl stop

停掉之后再执行以下命令就没什么问题了:

docker-compose up

搞定!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐