服务器上的Docker镜像和容器是否对所有用户可见?如何避免被误删?
Docker多用户共用服务器常见问题解答
1. 服务器上的Docker镜像、容器是否默认对所有用户可见?
默认所有加入docker用户组的用户,都可以查看、修改、删除服务器上的所有Docker镜像、容器、存储卷等资源,不存在原生的用户级资源隔离。
2. 列出的镜像是否为其他用户正在使用的资源?
仅通过docker images输出无法直接判断镜像是否被使用,你可以执行以下命令查询是否存在基于对应镜像创建的容器:
docker ps -a --filter ancestor=镜像名称:镜像标签
如果查询结果存在运行中或已停止的容器,说明该镜像大概率正在被其他用户使用,请勿随意删除。
3. 如何避免私有镜像被其他用户查看、操作?
有以下几种可行方案:
- 使用Rootless Docker模式:每个用户独立运行专属的Docker daemon进程,所有镜像、容器数据存储在用户个人家目录下,和其他用户的Docker环境完全隔离,互相不可见也无法操作对方资源,你的4.15版本内核完全支持该模式,是多人共用场景下的最优解。
- 本地私有存储:将构建好的私有镜像导出为压缩包存到自己的家目录(其他用户默认无权限访问你家目录的私有文件),需要使用时再临时导入到公共Docker环境,用完后删除公共环境中的镜像副本。导出导入命令如下:
# 导出镜像 docker save 私有镜像名:标签 -o ~/my_private_image.tar # 导入镜像 docker load -i ~/my_private_image.tar - 私有镜像仓库:自行搭建私有镜像仓库,将私有镜像上传到仓库存储,本地公共环境仅保留公共基础镜像,需要使用时临时拉取私有镜像,用完清理本地副本。
4. 为什么Docker镜像默认对所有用户公开?
Docker daemon进程默认以root权限运行,加入docker用户组的用户默认拥有daemon的全部操作权限,Docker原生没有设计多用户权限隔离机制,默认定位为单用户或可信用户组共享的容器 runtime,因此所有资源对所有docker组用户开放。
5. 其他用户误删我的镜像该如何处理?
- 提前备份:优先选择上面的Rootless Docker模式从根本上避免被他人操作的风险,或者提前将私有镜像导出为本地压缩包、推到私有仓库备份,误删后可以直接重新导入/拉取恢复。
- 若未备份镜像被误删,无法通过Docker本身恢复,需要重新构建镜像。
内容的提问来源于stack exchange,提问作者Gerrie
相关产品推荐
相关产品推荐

