DEBUG.WIKI
丽萨主机;为跨境业务选好 IP;原生 / 住宅 IP · 按套餐选择;查看 IP →
阿里云;从建站到云上业务;云服务器 · 数据库 · 对象存储;查看产品 →
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →

Docker 挂载报 mount path must be absolute

Linux 容器的挂载目标必须是绝对路径。区分宿主 source 与容器 target,通过 Compose 长语法核对最终配置,避免 working_dir 和宿主路径掩盖错误。

Compose 中写了 ./data:opt/app/data,容器还没启动就报:

invalid mount path: 'opt/app/data' mount path must be absolute

对于 Linux 容器,这里的错误指向挂载的容器内目标路径。opt/app/data 缺少开头的 /;把宿主目录改成绝对路径,或给镜像增加 WORKDIR /,都没有修正这个目标。

下面针对当前 Docker Engine 与 Docker Compose 的 Linux bind mount。Windows 容器有自己的路径形式,不能把这里的 /opt/app/data 规则机械套到它上面。

先把 source 和 target 分开看

短语法 ./data:/opt/app/data:ro 包含宿主来源、容器目标和访问模式。前面的 ./data 与后面的 /opt/app/data 属于不同文件系统。

在本地部署中,Compose 可以解析相对的宿主来源路径;容器内的挂载目标仍必须是绝对路径。working_dir 控制进程工作目录,不会把相对挂载目标自动补成工作目录下的路径。

错误清单可能写成:

volumes:
  - ./data:opt/app/data

若预期目标确实是容器根目录下的 opt/app/data,应改为:

volumes:
  - ./data:/opt/app/data:ro

这里使用只读挂载说明读取场景;应用需要写入时,应按实际数据用途决定读写权限。不要因为遇到路径校验错误,就放宽宿主目录权限。

长语法可以避免看错冒号两侧

下面是一份完整的演示 compose.yaml,假设旁边已存在 data 目录。使用当前 Compose、本地 Linux 容器环境,示例容器只列出挂载内容后退出:

services:
  inspect-data:
    image: alpine:3.22
    command: ["ls", "-la", "/opt/app/data"]
    volumes:
      - type: bind
        source: ./data
        target: /opt/app/data
        read_only: true
        bind:
          create_host_path: false

source 保留宿主路径,target 明确容器路径。create_host_path: false 使来源不存在时失败,避免拼错来源后自动建立空目录,进而误以为挂载成功但数据丢失。

这份示例用于独立测试目录。实际服务应只修改对应挂载,保留镜像、启动命令、用户、其他卷和配置,不要用整个演示文件替换应用部署。

检查最终配置和真实挂载

先使用实际部署所用的相同 Compose 文件组合查看解析结果:

docker compose config

如果部署原本使用多个 -f、环境文件或项目目录参数,检查时也要保留。核对目标服务的最终 volumes,尤其是覆盖文件是否又把目标改成相对路径。输出可能包含展开后的敏感配置,不应直接公开。

在隔离目录启动演示服务,可以查看目录列表与退出状态:

docker compose up inspect-data
docker compose ps -a

针对实际创建的容器,还可以读取挂载记录。把示例名称替换成具体容器名称或 ID:

docker inspect example-container --format '{{json .Mounts}}'

确认 Source 指向正确宿主位置、Destination 是所需的绝对容器路径,以及 RW 符合预期。容器创建失败时可能没有可供 inspect 的对象,此时应继续核对错误与渲染结果,而不是把对象不存在看成另一个挂载根因。

改路径前确认数据用途

挂载会遮住镜像在目标路径原有的内容。错误地把目标改成 / 或整个应用目录,可能让启动文件不可见;正确修复应使用应用实际读取的目录,而不是随便加一个能通过校验的路径。

已经运行的容器不会因 YAML 被编辑就自动改变挂载。应用正式变更时按既有部署流程重建受影响服务,提前保存配置和需要保留的数据,避免随手执行带删卷选项的清理命令。

若修改后挂载到了错误目录,停止进一步写入,按变更前记录恢复挂载配置,并检查错误目标期间产生的数据。只恢复 YAML 不会自动合并写到别处的文件。修复完成的标准是实际挂载位置、内容和应用行为均正确,而不仅是绝对路径校验通过。