在 Ubuntu 上使用 Docker 时,“权限问题”通常集中在用户权限、文件挂载权限、容器内部权限这三类。下面按最常见场景说明。
$ docker ps
permission denied while trying to connect to the Docker daemon socket
Docker 守护进程 socket 属于 root 和 docker 用户组。
把当前用户加入 docker 组:
sudo usermod -aG docker $USER
然后注销并重新登录(或重启):
newgrp docker
验证:
docker ps
⚠️ 注意:加入 docker 组 = 间接拥有 root 权限,仅限可信用户。
docker run -v /home/user/data:/data ubuntu touch /data/test
报错:Permission denied
宿主机目录 UID/GID 与容器内用户不一致。
docker run -u $(id -u):$(id -g) -v /home/user/data:/data ubuntu touch /data/test
sudo chown -R $USER:$USER /home/user/data
docker run --privileged -v /home/user/data:/data ubuntu
可临时测试:
docker run --security-opt apparmor=unconfined -v /data:/data ubuntu
⚠️ 仅用于排查,不建议长期使用。
默认容器里是 root:
docker run ubuntu id
# uid=0(root)
docker run -u 1000:1000 ubuntu
或 Dockerfile 中:
RUN useradd -m appuser
USER appuser
如果是 Ubuntu 20.04 / 22.04:
sudo systemctl status docker
确保:
sudo systemctl enable docker
sudo systemctl start docker
# 当前用户
whoami
id
# docker 组
getent group docker
# docker socket
ls -l /var/run/docker.sock
如果你能具体说一下是哪种权限问题(启动容器?挂载目录?CI?Docker Compose?),我可以直接给你对应的配置示例。