在 Ubuntu 上使用 Docker 时,权限管理主要涉及 Linux 用户权限、Docker 守护进程权限、容器内部权限、以及安全加固 几个方面。下面系统地讲一下。
Docker daemon(dockerd)默认以 root 运行
⇒ 能执行 docker 命令的人 = 拥有 root 权限
sudo docker run hello-world
⚠️ 把用户加入
docker组,等于给该用户 root 权限
sudo usermod -aG docker $USER
newgrp docker
验证:
docker ps
⚠️ 风险:
/、/etc 等✅ 适合:
❌ 不适合:
Docker 以普通用户运行,不使用 root
dockerd-rootless-setuptool.sh install
特点:
限制:
只允许特定命令:
sudo visudo
devuser ALL=(root) NOPASSWD: /usr/bin/docker ps
devuser ALL=(root) NOPASSWD: /usr/bin/docker logs *
docker run -u 1000:1000 nginx
或 Dockerfile:
USER appuser
docker run --read-only nginx
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx
❌ 危险:
docker run --privileged
✅ 生产禁止
docker run -v /data:/data ubuntu
容器内用户 UID 需匹配宿主机:
ls -n /data
❌ 禁止:
-v /:/host
-v /etc:/etc
services:
app:
user: "1000:1000"
read_only: true
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
| 方案 | 说明 |
|---|---|
| Docker + sudo | 简单 |
| Rootless Docker | 安全 |
| Podman | 无 daemon,天然非 root |
| Kubernetes RBAC | 集群级权限 |
| SELinux / AppArmor | 系统级隔离 |
--privileged如果你愿意,可以告诉我:
我可以给你一套最适合你的权限方案。