在Docker Runner上构建和运行镜像,而无需将其推送

6
我有一个Docker类型的Gitlab CI runner,并且有一个包含Dockerfile的仓库,我将使用它来构建我的构件。
我知道可以分为两个阶段完成,一是使用docker镜像构建图像并将其推送到注册表,二是使用该镜像构建构件。
但是我不关心将镜像保留在注册表中,我想跳过此步骤,只需在管道中使用docker镜像即可,而无需将其推送。
因此,在我的.gitlab-ci.yml文件中,我尝试了以下操作,只使用了docker build和docker run命令:
build-docs:
  tags:
    - docker
  image: docker:stable
  stage: build-docs
  script:
    - docker build -t $IMAGE_TAG .
    - docker run --rm $IMAGE_TAG source build
  artifacts:
    paths:
      - build

我的Dockerfile具有一个入口点,它需要源目录和构建目录参数。当然,我的代码库中源目录已经填充好了文件。
不过,在docker run步骤中,找不到代码库的文件,就像source目录是空的一样,但我想这是因为在Docker镜像中运行另一个Docker镜像有点奇怪。
如何修复运行步骤才能够找到文件?或者有没有不同的方法来实现我想要的结果?

2
Dockerfile是否将存储库文件复制到镜像中?如果没有,则需要在内部挂载它们:docker run -v $(pwd):/path/inside/where/they/should/be --rm $IMAGE_TAG source build - anemyte
1个回答

2
您必须按照Gitlab DinD limitations doc中的说明将您的工作目录挂载到正在运行的 Docker 容器中。例如,您可以执行以下操作:
script:
  - docker build -t $IMAGE_TAG .
  # assuming 'source' folder exists at 'path/to/source' in your Git repo
  - docker run -v "/builds/$CI_PROJECT_PATH/path/to/source:/path/to/source" $IMAGE_TAG /path/to/source build

使用Docker in Docker,您的$IMAGE_TAG容器应该可以访问您的本地构建文件(包括source文件夹)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接