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

如何使用GitLab Auto DevOps部署多容器应用并修复构建路径报错

问题核心原因

GitLab Auto DevOps默认的Auto Build阶段,构建上下文固定为项目根目录,DOCKERFILE_PATH变量仅用于指定Dockerfile的读取位置,不会自动切换构建上下文到Dockerfile所在目录,所以Dockerfile中用相对路径引用的同目录文件,会从项目根目录查找,自然找不到。


可直接使用的解决方法

方案1:修改Dockerfile中的文件引用路径(改动最小)

如果不想调整CI配置,直接修改两个Dockerfile的COPY语句,把文件路径改为相对于项目根目录的路径即可:

  • 若Streamlit应用Dockerfile在src/app/Dockerfile,同目录的requirements.txt,就把原来的COPY requirements.txt .改为COPY src/app/requirements.txt .
  • 若Nginx的Dockerfile在src/nginx/Dockerfile,同目录的project.conf,就把原来的COPY project.conf /etc/nginx/conf.d/改为COPY src/nginx/project.conf /etc/nginx/conf.d/

该方案无需调整CI配置,适合新手快速验证构建逻辑。

方案2:自定义Auto Build的构建上下文(更符合常规Docker构建习惯)

如果你想保留Dockerfile里的相对路径写法,就需要覆盖GitLab默认的Auto Build逻辑,给docker build命令指定上下文路径。你可以在.gitlab-ci.yml中加入以下配置,覆盖默认的build任务:

# 先引入默认的Auto DevOps模板
include:
  - template: Auto-DevOps.gitlab-ci.yml

# 覆盖默认的build任务,拆分为两个独立的容器构建任务
build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: overlay2
  parallel:
    matrix:
      - IMAGE_NAME: streamlit-app
        DOCKERFILE_PATH: src/app/Dockerfile
        BUILD_CONTEXT: src/app
      - IMAGE_NAME: nginx-proxy
        DOCKERFILE_PATH: src/nginx/Dockerfile
        BUILD_CONTEXT: src/nginx
  script:
    # 登录GitLab容器镜像仓库
    - echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin
    # 构建镜像,指定上下文为BUILD_CONTEXT对应的目录
    - docker build -f $DOCKERFILE_PATH -t $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA $BUILD_CONTEXT
    # 推送镜像到仓库
    - docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA

该配置会分别为两个容器执行构建,构建上下文就是各自Dockerfile所在的目录,原有Dockerfile里的相对路径写法完全不用修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:03