You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI/CD交付阶段报错:找不到指定Docker镜像求助

问题根源

GitLab CI的每个Job都是独立的执行容器,Build阶段构建的Docker镜像仅存在于该Job的临时环境中,Delivery阶段的Job无法直接访问到这些镜像,因此会出现"No such image"错误。

解决方案(推荐使用GitLab容器注册表中转)

将Build阶段构建的镜像先推送到GitLab自带的容器注册表,Delivery阶段从注册表拉取后再重新打标签推送到Docker Hub,具体配置修改如下:

修改后的.gitlab-ci.yml配置

image: docker:latest

services:
  - docker:dind

stages:
 - build      # 构建镜像并推送到GitLab Registry
 - test       # 执行测试
 - delivery   # 拉取镜像并推送至Docker Hub


build-backend:
  stage: build
  before_script:
    - docker ps -q | xargs -r docker stop
    - docker ps -a -q | xargs -r docker rm
    - docker system prune -a -f
    - docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
  script:
    - cd Backend
    - docker build -t $CI_REGISTRY_IMAGE/backend-node-prueba:latest .
    - docker push $CI_REGISTRY_IMAGE/backend-node-prueba:latest


build-frontend:
  stage: build
  before_script:
    - docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
  script:
    - cd Frontend
    - docker build -t $CI_REGISTRY_IMAGE/frontend-react-prueba:latest .
    - docker push $CI_REGISTRY_IMAGE/frontend-react-prueba:latest

run-tests:
  image: node:18
  stage: test
  script:
    - cd Backend
    - npm install
    - npm test

publish-backend-image:
  stage: delivery
  before_script:
    - docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
    - docker login --username myuser --password $DOCKER_TOKEN
  script:
    - docker pull $CI_REGISTRY_IMAGE/backend-node-prueba:latest
    - docker tag $CI_REGISTRY_IMAGE/backend-node-prueba:latest myuser/backend-node-prueba:latest
    - docker push myuser/backend-node-prueba:latest

publish-frontend-image:
  stage: delivery
  before_script:
    - docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
    - docker login --username myuser --password $DOCKER_TOKEN
  script:
    - docker pull $CI_REGISTRY_IMAGE/frontend-react-prueba:latest
    - docker tag $CI_REGISTRY_IMAGE/frontend-react-prueba:latest myuser/frontend-react-prueba:latest
    - docker push myuser/frontend-react-prueba:latest

说明:

  • 利用GitLab CI内置的CI_REGISTRY、CI_REGISTRY_USER、CI_REGISTRY_PASSWORD变量自动完成GitLab容器注册表的认证,无需手动配置。
  • Build阶段完成镜像构建后立即推送到GitLab Registry,确保Delivery阶段可以拉取到镜像。
其他可选方案(不推荐)
  • 合并Build和Delivery到同一Job:将构建与推送步骤放在同一个Job中,镜像会保存在同一环境,但会破坏流水线的阶段划分,不利于调试和流程管控。
  • 使用Runner本地缓存:配置GitLab Runner使用本地Docker存储,但仅适用于单Runner环境,多Runner节点无法保证镜像共享,可靠性低。

内容的提问来源于stack exchange,提问作者Pedro Castro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:04:58