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

如何在Docker Compose中指定Git仓库子目录为构建上下文?

如何正确指定Git仓库中的子目录作为Docker Compose构建上下文?

你的问题核心在于构建上下文的范围与Dockerfile内的相对路径不匹配:当你把context设为整个Git仓库时,Docker会将仓库根目录作为构建上下文,但你的Dockerfile在7/子目录里,它里面的COPY templates /etc/gotpl/指令是相对于7/目录的,而构建上下文是根目录,所以Docker会去仓库根目录找templates文件夹,自然找不到(实际它在7/templates)。

下面是最直接的解决方案:

方法:指定Git URL的子目录作为构建上下文

Docker支持在Git URL后通过#<分支名>:<子目录路径>的格式,直接将仓库的某个子目录作为构建上下文。这样Dockerfile里的相对路径就会基于这个子目录,不会再出现路径错误。

修改后的docker-compose.yml配置如下:

version: "2"
services:
  php:
    build:
      # 使用master分支的7/子目录作为构建上下文
      context: https://github.com/wodby/drupal-php.git#master:7
      args:
        - BASE_IMAGE_TAG=7.1
        - WODBY_USER_ID=117
        - WODBY_GROUP_ID=111
    volumes:
      - ./:/var/www/html

为什么这样能解决问题?

  • 当你指定#master:7后,Docker会克隆仓库并将7/目录作为构建上下文的根目录。
  • 此时Dockerfile就是上下文里的Dockerfile(不用再写7/Dockerfile),它里面的COPY templates ...会从7/templates(也就是当前上下文的根目录下的templates)复制文件,路径完全匹配。

这样重新执行docker-compose build,就能顺利完成镜像构建了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:30:00