温馨提示×

ubuntu docker怎么权限

小樊
56
2026-10-16 01:35:23
栏目: 智能运维

在 Ubuntu 上使用 Docker 时,“权限问题”通常集中在用户权限、文件挂载权限、容器内部权限这三类。下面按最常见场景说明。


一、普通用户无法执行 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 权限,仅限可信用户。


二、挂载目录后容器里无权限(volume / bind mount)

现象

docker run -v /home/user/data:/data ubuntu touch /data/test

报错:Permission denied

原因

宿主机目录 UID/GID 与容器内用户不一致。

解决方案

方案 1:使用当前用户 UID 启动容器(推荐)

docker run -u $(id -u):$(id -g) -v /home/user/data:/data ubuntu touch /data/test

方案 2:修改宿主机目录权限

sudo chown -R $USER:$USER /home/user/data

方案 3:容器中以 root 运行(不推荐生产)

docker run --privileged -v /home/user/data:/data ubuntu

三、SELinux / AppArmor 相关(Ubuntu 一般是 AppArmor)

如果是挂载失败

可临时测试:

docker run --security-opt apparmor=unconfined -v /data:/data ubuntu

⚠️ 仅用于排查,不建议长期使用。


四、Docker 以 root 运行容器(安全建议)

默认容器里是 root:

docker run ubuntu id
# uid=0(root)

建议做法

docker run -u 1000:1000 ubuntu

或 Dockerfile 中:

RUN useradd -m appuser
USER appuser

五、systemd 下 Docker 权限问题

如果是 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?),我可以直接给你对应的配置示例。

0 踩