起因是基于 CentOS 的 Docker 容器里启动 nginx
进程时提示无法监听 80 端口
docker bind() to 0.0.0.0:80 failed (13: Permission denied)
这是因为在 Linux
系统下默认只有 root
用户才能监听 1024 以下的端口,而安全起见 Nginx
进程的启动用户一般不会用 root
此时可以通过 capabilities 机制为 Nginx 程序单独赋予绑定端口的权利,只需要在 Dockerfile 中添加一行
RUN setcap cap_net_bind_service=+ep /usr/sbin/nginx
顺便如果非 Docker
环境可以直接 sudo setcap cap_net_bind_service=+ep /usr/sbin/nginx
, 其它 tomcat
python
等进程有绑定端口异常可以同理解决
更多关于 capabilities
的介绍可以参考: