You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使Docker卷主机路径与命令执行的工作目录相对?

问题描述

目录结构

├── docker-compose.yml
├── folder1
│   ├── docker-compose.yml
│   └── volume1
│       └── source
└── volume
    └── source

根目录docker-compose.yml内容

version: "3.4"

services:
    service:
        image: hello-world
        volumes:
            - ./volume/source:/volume/destination
        command: sleep 180

folder1目录下docker-compose.yml内容

version: "3.4"

services:
    service1:
        image: hello-world
        volumes:
            - ${PWD}/volume1/source:/volume1/destination
        command:
            - sleep 180

执行命令及输出

在根目录执行以下命令:

docker-compose -f docker-compose.yml -f folder1/docker-compose.yml config

得到输出:

services:
  service:
    command: sleep 180
    image: hello-world
    volumes:
    - /home/user/repos/learn/dockerl-compose/volume/source:/volume/destination:rw
  service1:
    command:
    - sleep 180
    image: hello-world
    volumes:
    - /home/user/repos/learn/dockerl-compose/volume1/source:/volume1/destination:rw
version: '3.4'

问题:如何使主机上绑定挂载的路径与对应Compose文件所在的目录相对(而非命令执行的根目录)?


解决方案

要让绑定挂载路径基于Compose文件所在目录而非命令执行的工作目录,只需调整folder1/docker-compose.yml中的挂载路径:

将${PWD}/volume1/source改为相对路径./volume1/source,修改后的文件内容如下:

version: "3.4"

services:
    service1:
        image: hello-world
        volumes:
            - ./volume1/source:/volume1/destination
        command:
            - sleep 180

再次执行原命令后,service1的挂载路径会被正确解析为/home/user/repos/learn/dockerl-compose/folder1/volume1/source,而根目录service的挂载路径仍基于根目录解析,两者分别对应各自Compose文件所在的目录。

核心逻辑:Docker Compose默认会基于当前加载的Compose文件所在目录解析相对路径,而${PWD}会强制使用命令执行时的工作目录,导致路径错误,改用相对路径即可恢复预期行为。

内容的提问来源于stack exchange,提问作者naraghi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:35:29