答案是:容器工作目录用docker inspect -f '{{.config.workingdir}}' 查看,挂载点用docker inspect --format='{{range .mounts}}{{.type}}: {{.source}} -> {{.destination}} ({{.mode}}){{println}}{{end}}'查看;bind类型.source为宿主机路径,volume类型需再docker volume inspect查mountpoint。

要查 Docker 容器的运行目录(即工作目录)和挂载点,关键不是看容器“在哪个目录下运行”,而是明确两件事:容器启动时设置的 工作目录(WorkingDir),以及实际通过 -v 或 --mount 绑定或映射的 挂载路径。这两者不同,但常被混淆。
查容器的工作目录(WorkingDir)
这是容器内进程默认的起始路径,由镜像 Dockerfile 中的 WORKDIR 指令或 docker run -w 参数指定。它不涉及宿主机路径,只影响 cd、ls 等命令的默认位置。
- 用
docker inspect查当前值:docker inspect -f '{{.Config.WorkingDir}}'
返回类似/app或空字符串(表示使用镜像默认,通常是/) - 若未显式设置,多数基础镜像(如
ubuntu、alpine)默认工作目录为/
查所有挂载点(含宿主机路径映射)
这才是你真正想定位“数据在哪”的核心操作。挂载点决定了容器内路径对应宿主机上的哪个真实位置。
- 推荐命令(清晰列出类型、源、目标、权限):
docker inspect --format='{{range .Mounts}}{{.Type}}: {{.Source}} -> {{.Destination}} ({{.Mode}}){{println}}{{end}}' - 常见输出示例:
bind: /home/user/logs -> /var/log/app (rw)volume: mydb_data -> /var/lib/mysql (rw) - 注意:
–bind类型的.Source是宿主机绝对路径;
–volume类型的.Source是卷名,需再执行docker volume inspect查Mountpoint才能得到真实路径(通常在/var/lib/docker/volumes/...)
验证挂载是否生效(不进容器也能确认)
无需 docker exec,直接从宿主机检查挂载源路径是否存在、权限是否匹配:
- 对 bind 挂载:直接
ls -l /宿主机/路径,确认目录存在且权限允许容器读写(尤其注意 SELinux 标签如:z或:Z) - 对 volume 挂载:先
docker volume ls找卷名,再docker volume inspect 卷名看Mountpoint,然后ls该路径 - 如果容器内程序报“Permission denied”或“no such file”,优先核对这里——而不是猜工作目录
补充:为什么不能只看 pwd?
进入容器后运行 pwd 显示的是当前 shell 的工作目录,可能已被手动 cd 过,不代表启动路径,也不反映挂载关系。它只是瞬时状态,对排查数据落盘位置没有实质帮助。











