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
相关产品推荐
相关产品推荐

