Docker 容器非 root 用户监听 80 端口

起因是基于 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 的介绍可以参考:

Linux capabilities 官方简介
知乎专栏-Linux capabilities 机制简介

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注