Watch at Ease看见世界,读懂生活。

科技 · 实用指南

Docker 绑定挂载提示“not a directory”?先证明两端类型

重建容器或删除数据前,审计守护进程宿主机源路径、Compose 基准路径与镜像目标。

展示守护进程源、镜像目标及有效 Docker 挂载检查的原创图
原创示意图:先证明两端类型,再检查有效挂载。 Watch at Ease

Docker 的“not a directory”不是让你重建一切,而是文件与目录类型不一致;也可能是守护进程找不到源路径后把它建成了目录。

冻结原始挂载声明,先在守护进程宿主机证明源类型,再证明镜像内目标类型,最后核对有效挂载。

冻结声明与守护进程环境

保存完整错误、原命令、全部 -f 文件、项目目录和环境文件,并用 docker compose config 查看合并后的挂载。

记录 docker context show 与 docker info,确认真正运行守护进程的主机;远程守护进程不能直接使用客户端本地路径。

在守护进程主机证明源类型

把源路径解析为绝对路径,用 stat 同时检查路径本身与解引用后的目标,记录缺失、文件、目录或悬空链接。

若文件名变成目录,检查早先 -v 或短语法是否在文件缺失时创建了它;诊断时改用 --mount 或 create_host_path:false。

先解析 Compose 基准路径

多文件配置的相对路径来自第一个基础 Compose 文件;把绝对结果与渲染配置及守护进程文件系统对照。

显式检查环境变量展开;空 DATA_DIR 可能把路径改到根目录。只改声明或变量,不删除卷和镜像。

证明镜像内目标类型

在不应用冲突挂载的安全容器中检查目标与父目录类型;若启动脚本创建路径,就在相同初始化阶段检查。

确定哪一端错误:配置文件需先创建宿主机文件且目标为文件;目录树必须目录对目录。

只重建一次并验证挂载

修正两端后只重建受影响容器;inspect Mounts 的 Type、Source、Destination 与只读状态。

同一用户重跑原工作负载并从容器内读取目标;仍失败就比对真实宿主机路径和镜像摘要。

区分 Docker 文件/目录挂载错误四类原因的原创图
原创示意图:区分缺失源、错误基准路径、远程守护进程或目标类型不符。 Watch at Ease