在 Gitlab CI/CD 中运行 Docker 容器的问题

问题描述

我正在尝试使用 Gitlab CI/CD 构建和运行我的 Docker 映像,但有一个问题我无法解决,即使本地一切正常。

这是我的 Dockerfile:

FROM <internal_docker_repo_image>
RUN apt update && \
    apt install --no-install-recommends -y build-essential gcc
copY requirements.txt /requirements.txt

RUN pip install --no-cache-dir --user -r /requirements.txt

copY . /src
workdir /src
ENTRYPOINT ["python","-m","dvc","repro"]
@H_404_6@

这就是我运行容器的方式:

docker run --volume ${PWD}:/src --env=GOOGLE_APPLICATION_CREDENTIALS=<path_to_json> <image_name> ./dvc_configs/free/dvc.yaml --force@H_404_6@

在本地运行时一切正常,但在 Gitlab CI/CD 上运行时失败。

stages:
  - build_image

build_image:
  stage: build_image
  image: <internal_docker_repo_image>
  script:
    - echo "Building Docker image..."
    - mkdir ~/.docker
    - cat $GOOGLE_CREDENTIALS > ${CI_PROJECT_DIR}/key.json
    - docker build . -t <image_name>
    - docker run --volume ${PWD}:/src --env=GOOGLE_APPLICATION_CREDENTIALS=<path_to_json> <image_name> ./dvc_configs/free/dvc.yaml --force
  artifacts:
        paths:
          - "./data/*csv"
        expire_in: 1 week

@H_404_6@

这会导致以下错误ERROR: you are not inside of a DVC repository (checked up to mount point '/src')@H_404_6@

以防万一您不知道 DVC 是什么,这是一个用于机器学习的工具,用于对模型、数据集、指标进行版本控制,此外,还可以设置您的管道,我将其用于我的案例.

本质上,它需要在执行 .dvc@H_404_6@ 的目录中有两个文件.git@H_404_6@ 和 dvc repro@H_404_6@。

在这种特殊情况下,鉴于文件夹的内容完全相同并且 .dvc@H_404_6@ 和 .git@H_404_6@ 都存在,我不知道为什么它无法运行此命令。

提前致谢!

解决方法

您的 COPY . /srcHidden file .env not copied using Docker COPY 的原因相同。您的 !.dvc 中可能需要 .dockerignore

此外,docker run --volume ${PWD}:/src 会覆盖容器的 /src,因此 $PWD 本身将需要 .git & .dvc 等。您似乎没有克隆运行这些 script 命令之前的 repo。