通过Snap安装Dive后Docker镜像/容器不显示的问题求助
解决Snap安装Dive后Docker根目录偏移的问题
问题背景
在Ubuntu 22.04.1 LTS上通过Snap安装Dive工具后,出现以下异常:
- 执行
docker images、docker container ls命令无任何返回结果,但原有镜像和容器的文件仍存在于/var/lib/docker目录中 - 重启Docker守护进程后问题依旧,排查发现
docker info显示Docker根目录被修改为/var/snap/docker/common/var-lib-docker
解决方法
方法1:通过Docker daemon配置指定原根目录
- 编辑Docker守护进程配置文件(不存在则创建):
sudo nano /etc/docker/daemon.json - 添加或修改
data-root字段,指向原来的Docker数据目录:{ "data-root": "/var/lib/docker" } - 保存文件后,重启Docker服务:
sudo systemctl restart docker - 验证配置是否生效:
正常情况下会输出docker info | grep "Docker Root Dir"Docker Root Dir: /var/lib/docker,此时再执行docker images就能看到原有镜像了
方法2:适配Snap版Docker的环境(若Docker本身是Snap安装)
如果你的Docker是通过Snap安装的,Snap的隔离机制会导致它默认使用自己的目录,可通过以下方式处理:
- 先停止Snap版Docker服务:
sudo snap stop docker - 要么创建软链接让Snap Docker指向原数据目录:
要么迁移原数据到Snap指定的目录(适合不想修改配置的场景):sudo ln -s /var/lib/docker /var/snap/docker/common/var-lib-dockersudo rsync -av /var/lib/docker/ /var/snap/docker/common/var-lib-docker/ - 重新启动Snap版Docker:
sudo snap start docker - 执行
docker images验证是否能识别原有镜像和容器
注意事项
- 修改
daemon.json时要保证JSON格式正确,比如引号、逗号都不能错,否则Docker可能启动失败 - 迁移数据前建议备份
/var/lib/docker目录,避免数据丢失 - 若后续不需要Snap版Dive,卸载后改用Deb包安装Dive,能减少这类环境冲突问题
内容的提问来源于stack exchange,提问作者Alexander Argyriou
相关产品推荐
相关产品推荐

