【问题标题】:Problem running a Docker container in Gitlab CI/CD在 Gitlab CI/CD 中运行 Docker 容器的问题
【发布时间】:2021-05-12 14:44:55
【问题描述】:

我正在尝试使用 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"]

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

docker run --volume ${PWD}:/src --env=GOOGLE_APPLICATION_CREDENTIALS=&lt;path_to_json&gt; &lt;image_name&gt; ./dvc_configs/free/dvc.yaml --force

在本地运行时一切正常,但在 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

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

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

本质上,它需要两个文件夹.dvc.git 位于执行dvc repro 的目录中。

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

提前致谢!

【问题讨论】:

    标签: docker continuous-integration gitlab-ci dvc


    【解决方案1】:

    您的COPY . /src 存在问题,原因与Hidden file .env not copied using Docker COPY 相同。您的.dockerignore 中可能需要!.dvc

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

    【讨论】:

    • 不幸的是,这没有帮助。奇怪的是,相同的 Dockerfile 和 docker run 在没有 Gitlab CI/CD 的情况下会产生预期的结果,如果问题与 dockerignore 文件有关,我认为不会出现这种情况。如果我将这部分 --volume ${PWD}:/src 更改为其他任何内容(src 除外),则管道成功。
    • 谢谢!这是有道理的,但为什么它适用于没有 Gitlab CI/CD 的 docker run。相同的命令,不同的结果。
    • 我的理解是${PWD} 已将所有文件推送到存储库,因此在挂载后,只要在容器内使用/src,我们就可以有效地访问该目录。我当然可能会误解它的实际工作原理,但问题仍然存在:为什么它在 CI/CD 之外工作?
    • @DonDraper 我怀疑这些文件是否在 CI/CD 中,因为我在您的配置中看不到任何克隆步骤,所以不知道包含/不包含什么。你可以试试ls -a
    • @casper.dci, ls -a 表示当前目录有所有必要的文件夹和文件
    猜你喜欢
    • 2021-06-07
    • 2021-02-27
    • 2020-10-27
    • 2020-06-15
    • 2019-07-04
    • 1970-01-01
    • 2022-08-10
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多