如何通过Bamboo从已认证registry拉取Docker镜像到指定ECR仓库?
Bamboo从带认证的Nexus3镜像仓库同步镜像到AWS ECR 实现方案
前置校验(你已完成的配置可跳过对应项)
- 确认Bamboo Agent已安装Docker、AWS CLI,且Docker服务处于正常运行状态
- 确认你已配置的ECR相关变量可用:包括ECR仓库地址、AWS区域、AWS访问凭据(或Agent已绑定有权限的IAM角色)
- 提前在Bamboo的加密变量中配置Nexus3的访问信息:
NEXUS_REGISTRY_ADDR(Nexus镜像仓库地址)、NEXUS_USER(拉取权限账号)、NEXUS_PWD(账号密码,需设置为加密隐藏类型)
核心实现流程
1. 可选:Nexus3非HTTPS场景的预配置
如果你的Nexus3镜像仓库用的是HTTP协议,需要提前在所有Bamboo Agent节点的Docker配置中添加信任:
- 修改Docker配置文件
/etc/docker/daemon.json,新增配置:
{ "insecure-registries": ["你的Nexus3仓库地址"] }
- 执行
systemctl daemon-reload && systemctl restart docker生效配置
2. Bamboo流水线任务编排
按顺序添加以下Shell类型任务即可:
- 登录Nexus3镜像仓库
docker login ${NEXUS_REGISTRY_ADDR} -u ${NEXUS_USER} -p ${NEXUS_PWD}
- 拉取Nexus3中的目标镜像,镜像名和标签可设置为Bamboo构建参数动态传入
docker pull ${NEXUS_REGISTRY_ADDR}/${IMAGE_NAME}:${IMAGE_TAG}
- 为镜像打ECR仓库目标标签
docker tag ${NEXUS_REGISTRY_ADDR}/${IMAGE_NAME}:${IMAGE_TAG} ${ECR_REPO_ADDR}/${IMAGE_NAME}:${IMAGE_TAG}
- 登录AWS ECR仓库
aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ECR_REPO_ADDR}
- 推送镜像到ECR目标仓库
docker push ${ECR_REPO_ADDR}/${IMAGE_NAME}:${IMAGE_TAG}
- (推荐)清理本地镜像与登录凭据,避免Agent磁盘占用和凭据泄露
# 删除本地镜像 docker rmi ${NEXUS_REGISTRY_ADDR}/${IMAGE_NAME}:${IMAGE_TAG} ${ECR_REPO_ADDR}/${IMAGE_NAME}:${IMAGE_TAG} # 退出两个镜像仓库的登录状态 docker logout ${NEXUS_REGISTRY_ADDR} docker logout ${ECR_REPO_ADDR}
3. 结果校验(可选)
可以添加校验任务确认镜像推送成功:
docker manifest inspect ${ECR_REPO_ADDR}/${IMAGE_NAME}:${IMAGE_TAG} # 命令返回0即代表镜像已存在于ECR仓库中
注意事项
如果Nexus3使用自签名SSL证书,需要提前将根证书导入Bamboo Agent节点的Docker信任证书目录,避免登录时证书验证失败
批量同步多镜像的场景,可以将需要同步的镜像名、标签列表存为单独的配置文件,在Shell任务中循环读取执行拉取、打标、推送逻辑即可
所有涉及账号密码的变量必须在Bamboo中设置为加密类型,禁止在任务日志中打印敏感信息
内容的提问来源于stack exchange,提问作者Low Tech
相关产品推荐
相关产品推荐

