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

如何通过CI/CD将docker-compose构建的镜像推送至GitLab Registry

推送docker-compose关联镜像到GitLab Registry操作指南

前置准备

  • 确保你的GitLab项目已开启Registry功能
  • 将本地docker-compose.yml中自定义镜像的命名规则调整为GitLab Registry标准格式:registry.gitlab.com/<用户名>/<项目名>/<镜像名>:<标签>,若使用官方未修改的Postgres镜像可跳过Postgres镜像的命名调整和推送步骤
  • 提前生成GitLab个人访问令牌,勾选read_registry和write_registry权限,在项目「设置」-「CI/CD」-「变量」中新增CI_REGISTRY_USER(你的GitLab用户名)、CI_REGISTRY_PASSWORD(刚生成的访问令牌)两个变量,变量类型设置为普通变量即可

CI配置文件编写

在项目根目录新建.gitlab-ci.yml文件,参考配置如下:

stages:
  - build-push

build-and-push-images:
  stage: build-push
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2376
    DOCKER_TLS_CERTDIR: "/certs"
    API_IMAGE_NAME: $CI_REGISTRY_IMAGE/api:latest
    # 不需要推送自定义Postgres镜像可删除下行
    POSTGRES_IMAGE_NAME: $CI_REGISTRY_IMAGE/postgres:latest
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    # 基于docker-compose构建所有镜像
    - docker-compose build
    # 给API镜像打GitLab Registry标签,替换<>内容为你本地构建的API镜像名和标签
    - docker tag <本地API镜像名>:<本地标签> $API_IMAGE_NAME
    # 不需要推送自定义Postgres镜像可删除下行,替换<>内容为你本地构建的Postgres镜像名和标签
    - docker tag <本地Postgres镜像名>:<本地标签> $POSTGRES_IMAGE_NAME
    # 推送镜像
    - docker push $API_IMAGE_NAME
    # 不需要推送自定义Postgres镜像可删除下行
    - docker push $POSTGRES_IMAGE_NAME
  only:
    # 按需调整触发构建的分支规则
    - main

注意事项

  • 仅当你对官方Postgres镜像做了定制修改(比如导入初始化SQL、修改默认配置)时才需要推送该镜像,否则后续部署环节直接拉取官方镜像即可,减少冗余操作
  • 提交.gitlab-ci.yml到对应分支后,GitLab会自动触发CI流水线,执行镜像构建和推送操作,可在项目「CI/CD」-「流水线」中查看执行状态
  • 后续部署环境拉取私有Registry镜像前,需要提前在部署环境执行docker login registry.gitlab.com完成认证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:39:04