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

Docker容器部署的GitLab Runner对接AWS ECR镜像发布失败求助

GitLab CI/CD 对接AWS ECR发布镜像解决方案

问题核心

你的CI任务执行docker build时无法连接到Docker daemon,根源在于:

  • 手动在Ubuntu镜像中安装Docker后,未正确配置客户端连接到docker:dind服务的daemon
  • 冗余的镜像选择增加了配置复杂度

解决方案步骤

1. 改用Docker-in-Docker镜像简化环境

放弃Ubuntu镜像手动安装Docker,直接使用docker:dind镜像——该镜像已预装完整Docker环境,可直接对接docker:dind服务,避免手动安装的配置问题。

2. 配置Docker环境变量

添加DOCKER_HOST变量,让Docker客户端指向docker:dind服务的TCP端口,而非本地Unix套接字:

DOCKER_HOST: tcp://docker:2375

3. 简化AWS凭证配置

无需使用aws configure,AWS CLI会自动读取GitLab CI/CD中设置的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY变量,直接使用即可。

4. 修正Runner的Docker套接字映射(Linux环境)

将docker-compose中的套接字映射路径从//var/run/docker.sock:/var/run/docker.sock改为:

- /var/run/docker.sock:/var/run/docker.sock

修改后的完整.gitlab-ci.yaml

variables:
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2
  AWS_DOCKER_REGISTRY: 349291937330.dkr.ecr.ap-south-1.amazonaws.com
  AWS_APP_NAME: sonata-certification
  AWS_DEFAULT_REGION: ap-south-1

stages:
  - publish

docker-publish-job:
  image: docker:dind
  services:
    - docker:dind
  before_script:
    # 安装AWS CLI(基于Alpine镜像的apk包管理)
    - apk add --no-cache aws-cli
    - aws --version
    # 验证Docker连接状态
    - docker info
  stage: publish
  script:
    - cd ScoreMicroservice
    - docker build -t $AWS_DOCKER_REGISTRY/$AWS_APP_NAME:$CI_PIPELINE_ID .
    # ECR登录并推送镜像
    - aws ecr get-login-password | docker login --username AWS --password-stdin $AWS_DOCKER_REGISTRY
    - docker push $AWS_DOCKER_REGISTRY/$AWS_APP_NAME:$CI_PIPELINE_ID

关键注意事项

  • 确保GitLab项目的CI/CD变量中已正确配置AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,且该凭证拥有ECR的PutImage、InitiateLayerUpload等推送权限。
  • GitLab Runner容器的privileged: true配置必须保留,这是运行docker:dind服务的必要条件。
  • 若需TLS加密连接Docker daemon,可添加DOCKER_TLS_CERTDIR: "/certs"等变量,配置对应证书挂载。

内容的提问来源于stack exchange,提问作者T V S K MANOJ KUMAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:17:02