使用 docker inspect 获取镜像暴露的存储卷路径需区分镜像声明的 VOLUME(静态,如 /var/cache/nginx)和容器实际挂载路径(动态,通过 .Mounts.Source 获取主机真实路径)。

使用 docker inspect 获取镜像暴露的存储卷路径,关键在于区分“镜像声明的卷”(VOLUME 指令)和“容器实际挂载的卷路径”。镜像本身不保存运行时路径,只声明哪些目录应被挂载为卷;真正可查的路径在容器启动后生成。因此,“动态获取”需针对正在运行或已创建的容器,而非镜像本身。
查看镜像中声明的 VOLUME 路径
镜像构建时通过 VOLUME 指令声明的目录,可通过 inspect 镜像获取,但这是静态声明,不是实际路径:
- 运行
docker inspect nginx:alpine | jq '.[0].Config.Volumes'或直接用docker inspect nginx:alpine --format='{{.Config.Volumes}}' - 输出类似
map[/var/cache/nginx:{} /var/log/nginx:{}],表示镜像建议将这两个路径作为数据卷 - 注意:这些路径未绑定主机目录,也不含真实路径,仅作声明用途
获取容器实际挂载的卷路径(含主机路径)
只有容器创建/运行后,Docker 才分配或映射具体路径。此时 inspect 容器才能拿到真实挂载信息:
- 启动容器时若未显式指定
-v,Docker 会为声明的VOLUME自动创建匿名卷,路径可在Mounts字段查到 - 执行
docker inspect my-nginx-container --format='{{range .Mounts}}{{println .Type "→" .Source "→" .Destination}}{{end}}' - 典型输出:
volume → /var/lib/docker/volumes/abc123.../_data → /var/log/nginx,其中.Source是主机上的真实路径 - 若用了命名卷或绑定挂载,
.Source会显示对应主机路径或卷名
快速提取某容器中某个目标路径对应的主机位置
例如想查容器内 /var/log/nginx 实际映射到主机哪:
- 用 Go template 精确匹配:
docker inspect my-nginx-container --format=" {{ range .Mounts }}{{ if eq .Destination \"/var/log/nginx\" }}{{ .Source }}{{ end }}{{ end }}" - 返回空表示未挂载;返回路径(如
/var/lib/docker/volumes/applogs/_data)即为主机端位置 - 对匿名卷,该路径不可直接读写(权限/命名空间限制),建议优先使用
docker volume inspect查卷详情
配合 volume inspect 获取更完整信息
若 .Mounts.Source 是一个卷名(非绝对路径),可进一步 inspect 卷本身:
- 先提取卷名:
docker inspect my-nginx-container --format='{{range .Mounts}}{{if eq .Destination "/var/log/nginx"}}{{.Name}}{{end}}{{end}}' - 再查卷:
docker volume inspect vol-name --format='{{.Mountpoint}}',得到主机上可访问的完整路径 - 此方式适用于命名卷,结果稳定且便于脚本化处理


















