在 Ubuntu 上使用 Docker 时,“权限怎么给”通常分为几种常见场景。下面按最常见 → 进阶给你讲清楚。
Got permission denied while trying to connect to the Docker daemon socket
当前用户不在 docker 用户组
sudo usermod -aG docker $USER
然后注销并重新登录(或重启)
验证:
docker ps
✅ 不用每次加 sudo
docker run -it ubuntu bash
默认就是 root
如果你在容器里想切换用户:
useradd -m test
su test
docker run --privileged ubuntu
⚠️ 一般只在:
使用
docker run --cap-add NET_ADMIN ubuntu
常用 cap:
NET_ADMIN:网络管理SYS_ADMIN:系统管理SYS_PTRACE:调试容器里无法写宿主目录
docker run -v /data:/data -u $(id -u):$(id -g) ubuntu
sudo chmod -R 777 /data
(不安全,仅测试)
services:
app:
image: ubuntu
user: "1000:1000"
privileged: false
cap_add:
- NET_ADMIN
允许 Docker 访问宿主资源:
sudo systemctl enable docker
sudo systemctl start docker
| 场景 | 做法 |
|---|---|
| 当前用户不能跑 docker | usermod -aG docker $USER |
| 容器需要 root | 默认就是 |
| 需要系统权限 | --cap-add |
| 需要全部权限 | --privileged |
| 目录写不了 | 对齐 UID / 改权限 |
如果你能说一下具体场景(比如:Dockerfile、挂载、CI、K8s、某个报错),我可以直接给你精准命令。