分类: 容器网络运维

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镜像源汇总

在国内使用 Docker 的朋…

1 天 之前

五分钟搞懂MCP是什么

首先本文的面向对象是开发人员,…

6 天 之前

ShardingSphere 更新 5.5.2 后找不到数据表

典型现象就是没有配置在分表规则…

4 周 之前

WSL+Tesla P40显卡 CUDA 不可用

基于 WSL 访问显卡时的一些…

2 月 之前

FreqTrade 量化交易超跌抄底策略

分享一个交易策略:当价格在过去…

4 月 之前

如何安全取回 GitHub 存储的 Action Secrets

在GitHub的使用过程中,存…

6 月 之前