
bentolor/docker-dind-awsclibentolor/docker-dind-awscli 是 docker 镜像的替代品,适用于需要同时使用 awscli 的场景。类似地,bentolor/docker-dind-awscli:dind 可作为 docker:dind 的替代品,额外集成了 awscli。本镜像解决了在Docker-based CI流水线中同时使用Docker客户端和AWS CLI的需求痛点。
在CI流水线中执行 aws ecr set-login-password … | docker login … 等操作时,通常会遇到以下问题:
docker:latest 镜像未安装Python、pip 或 aws 工具awscli 镜像不提供Docker支持awscli 安装到 docker:stable 中无法工作(因 docker:latest 基于Alpine Linux,而 awscli 需要glibc库,Alpine默认缺失)本镜像通过以下步骤构建,解决了上述问题:
docker:latest 镜像awscli适用于需要在Docker环境中同时运行Docker命令和AWS CLI命令的场景,特别是CI/CD流水线(如Gitlab CI、Jenkins等),例如:
以下示例展示了在Gitlab CI中从Gitlab容器仓库拉取镜像并推送到AWS ECR的配置:
yamldeploy:api:ecr-image: image: bentolor/docker-dind-awscli services: - name: docker:dind # 启动独立的dind容器作为Docker守护进程 stage: publish-aws script: # 获取本地Docker镜像,重命名并推送到目标环境 - docker info # 验证Docker客户端是否正常工作 - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN gitlab.foo.bar:4567 # 登录Gitlab容器仓库 - docker pull $LOCAL_IMAGE_NAME:$CI_COMMIT_SHA # 拉取本地镜像 - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $REPOSITORY_HOST_API # 使用AWS CLI登录ECR - docker tag $LOCAL_IMAGE_NAME:$CI_COMMIT_SHA $REPOSITORY_HOST_API/myservice:latest # 重命名镜像 - docker push $REPOSITORY_HOST_API/myservice:latest # 推送镜像到ECR only: - master # 仅在master分支触发
说明:通过 services 启动 docker:dind 容器作为Docker守护进程,Gitlab CI会自动设置 DOCKER_HOST 环境变量,使本镜像中的Docker客户端连接到该守护进程。
自2021-10-15起,本镜像不再基于已停止维护的 docker:stable 标签(Docker v19),而是基于 docker:latest 标签。如果此变更导致构建失败,可以暂时使用 bentolor/docker-dind-awscli:2.2.36 版本。
docker:dind:允许在Docker守护进程中运行另一个Docker守护进程(即Docker-in-Docker),暴露2375/2376端口提供Docker服务docker:latest:仅包含Docker客户端,需连接到外部Docker守护进程(通过 DOCKER_HOST 指定)使用独立的dind服务(推荐):
docker:dind 作为服务容器(提供Docker守护进程)bentolor/docker-dind-awscli 替代 docker:latest 作为客户端容器,在其中运行 docker 和 aws 命令在dind容器内运行命令:
bentolor/docker-dind-awscli:dind 替代 docker:dind,在容器内同时运行Docker守护进程和客户端命令(包含 aws 工具)manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务