在Gitlab CI/CD中运行Docker容器时出现问题

在Gitlab CI/CD中运行Docker容器时出现问题,docker,continuous-integration,gitlab-ci,dvc,Docker,Continuous Integration,Gitlab Ci,Dvc,我正在尝试使用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

我正在尝试使用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"]
来自
运行apt更新&&\
apt安装--无安装建议-y构建基本gcc
复制requirements.txt/requirements.txt
运行pip安装--无缓存目录--user-r/requirements.txt
抄袭/src
WORKDIR/src
入口点[“python”、“-m”、“dvc”、“复制”]
以下是我运行容器的方式:

docker run--volume${PWD}:/src--env=GOOGLE\u APPLICATION\u CREDENTIALS=./dvc\u 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

阶段:
-塑造你的形象
建立你的形象:
阶段:塑造你的形象
图片:
脚本:
-echo“构建Docker映像…”
-mkdir~/.docker
-cat$GOOGLE\u凭证>${CI\u项目\u目录}/key.json
-docker build-T
-docker run--volume${PWD}:/src--env=GOOGLE\u APPLICATION\u CREDENTIALS=./dvc\u configs/free/dvc.yaml--force
人工产品:
路径:
-“/data/*csv”
过期时间:1周
这将导致以下错误:
错误:您不在DVC存储库中(已检查到装入点'/src')

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

基本上,它需要在执行
dvc repro
的目录中有两个文件夹
.dvc
.git

在这种情况下,我不知道为什么它不能运行这个命令,因为文件夹的内容完全相同,并且
.dvc
.git
都存在


提前谢谢

你的
复制/src
存在问题的原因与。您可能需要
!。您的
.dockrignore
中的dvc


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

不幸的是,这没有帮助。奇怪的是,相同的Dockerfile和
docker运行
在没有Gitlab CI/CD的情况下会产生预期的结果,如果问题与
DockerInore
文件相关,我认为情况不会如此。如果我将此部分
--volume${PWD}:/src
更改为任何其他内容(除了
src
),管道将成功。@DonDraper right,更新的答案:)谢谢!这是有道理的,但是为什么它在没有Gitlab CI/CD的情况下运行
docker
。相同的命令,不同的结果。我的理解是,
${PWD}
将所有文件推送到repo,因此在装载后,只要容器内使用
/src
,我们就可以有效地访问此目录。当然,我可能会误解它是如何工作的,但问题仍然是:为什么它在CI/CD之外工作?@DonDraper我怀疑这些文件是否在CI/CD中,因为我在您的配置中没有看到任何克隆步骤,所以不知道包括/不包括哪些内容。您可以尝试
ls-a