分类: 容器网络运维

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 机制简介

Recent Posts

基于 Docker 定时打印文件

先说背景,喷墨打印机有个很大的…

2 年 之前

Java 运行时反射获取来自继承的泛型

背景 正常情况下 Java 的…

2 年 之前

Java 基于 ByteBuddy 重写系统当前时间

背景 一般单元测试时总会有些代…

2 年 之前

华硕 B450F-Gaming 主板 I211-AT 网卡驱动安装

事情起因是买了块华硕的 ROG…

3 年 之前

PHP 安装 Memcached 扩展

登录服务器挨步执行: # su…

3 年 之前

LayUI 官方树组件添加自定义按钮

LayUI 官方 tree 组…

3 年 之前