首页 > 解决方案 > 有没有办法在 dockerfiles 中使用容器注册表图像?

问题描述

我目前正在尝试在 Gitlab CI 中构建 docker 图像。在这里,我尝试使用 Gitlab 容器注册表中的图像来构建图像。

FROM <CI_REGISTRY>/<CI_PROJECT_ROOT_NAMESPACE>/<CI_PROJECT_NAME>/<image_name>

RUN echo 'hello world' 

执行与

test:
 stage: build
 image: docker
 services: 
   - docker:dind
 before_script:
   - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
 script:
   - docker build --pull -t $CI_REGISTRY_IMAGE/test:latest .
   - docker push $CI_REGISTRY_IMAGE/test:latest

无法构建映像,因为清单是未知的。

这样做的最佳方法是什么?在构建图像之前在工作中提取图像对我来说并不合适。

谢谢

标签: dockergitlabdockerfilegitlab-ci

解决方案


我想你可能会读到这个: https ://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact

那么你的 docker 文件可能会像这样开始:

ARG CI_REGISTRY_IMAGE_FULL_NAME
FROM ${CI_REGISTRY_IMAGE_FULL_NAME}

那么您对 ​​docker build 的调用可能如下所示:

script:
   - > docker build --pull 
       --build-arg CI_REGISTRY_IMAGE_FULL_NAME=$CI_REGISTRY_IMAGE_FULL_NAME
       -t $CI_REGISTRY_IMAGE/test:latest .

不要将 CI_REGISTRY_IMAGE_FULL_NAME 基础镜像的名称与 $CI_REGISTRY_IMAGE/test:latest 混淆,后者将是新的镜像名称


推荐阅读