1. 查看完整的挂载信息
# 查看完整的挂载信息(JSON 格式)
docker inspect mysql --format='{{json .Mounts}}' | jq .
# 如果没有 jq,使用原生输出,只查看挂载部分
docker inspect mysql | grep -A 30 '"Mounts"'
jq 命令安装
sudo apt-get update && sudo apt-get install -y jq
sudo yum install -y epel-release && sudo yum install -y jq
2. 查看 Binds 和 Mounts 信息
# 查看 HostConfig 中的 Binds
docker inspect mysql --format='{{json .HostConfig.Binds}}'
# 查看 Bind mount
docker container inspect mysql --format='{{range .Mounts}}{{if eq .Type "bind"}}Bind: {{.Source}} -> {{.Destination}}{{end}}{{end}}'
# 查看 Mounts 信息(推荐)
docker inspect mysql --format='{{json .Mounts}}'
3. 使用 jq 格式化输出
# 格式化显示挂载信息
docker inspect mysql | jq '.[0].Mounts'
# 只显示数据卷相关信息
docker inspect mysql | jq '.[0].Mounts[] | select(.Type=="volume")'
4. 直接查看容器使用的数据卷(推荐) ⭐️⭐️⭐️⭐️⭐️
特别适合:在清理数据卷的情况下,非常有用的命令
# 查看容器的数据卷使用情况
docker container inspect mysql --format='{{range .Mounts}}{{if eq .Type "volume"}}Volume: {{.Name}} -> {{.Destination}}{{end}}{{end}}'
MySQL 容器通常会创建匿名数据卷来存储数据库文件,挂载点通常是 /var/lib/mysql
。执行上述命令后,你应该能看到类似这样的输出:
[
{
"Type": "volume",
"Name": "67a1378c2926d63282efd949d05e7987f30cebca3c737c21937c792029dc676e",
"Source": "/var/lib/docker/volumes/67a1378c2926d63282efd949d05e7987f30cebca3c737c21937c792029dc676e/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
其中 "Name"
字段就是你要找的匿名数据卷 ID。
请执行上述命令之一来获取完整的挂载信息,这样就能确定这个 MySQL 容器使用的具体是哪个匿名数据卷了。
如果执行输出为空说明这个 MySQL 容器可能没有使用数据卷,或者使用的是 bind mount 而不是 volume。
可能的情况
情况1:使用了 bind mount 如果 MySQL 容器是这样启动的:
docker run -v /host/path:/var/lib/mysql mysql
情况2:没有持久化存储 如果 MySQL 容器启动时没有指定任何卷:
这种情况下,数据会存储在容器的可写层中,容器删除后数据就丢失了。
情况3:使用了匿名卷但检测不到 有时候镜像本身定义了 VOLUME,但可能在检查时显示不正确。
验证方法
# 1. 查看容器是否有数据持久化
docker exec mysql ls -la /var/lib/mysql
# 2. 查看镜像的 Dockerfile 中是否定义了 VOLUME
docker image inspect mysql | grep -i volume
# 3. 查看容器的完整信息
docker inspect mysql > mysql_inspect.json
、