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

如何为Amazon ECR配置自定义域名?

解决ECR自定义域名的可行方案

确实,ECR默认的URI又长又难记,直接套CNAME的坑我也踩过——证书不匹配、登录验证失败这些问题一个不少。给你分享几个经过验证的可行方案:

方案一:用CloudFront做反向代理(推荐,无额外服务器)

这是我日常用得最多的方案,完全基于AWS原生服务,不需要额外部署服务器:

  • 第一步:申请ACM证书:一定要在us-east-1区域申请包含你的自定义域名(比如cr.example.com)的SSL证书,因为CloudFront只认这个区域的证书。
  • 第二步:创建CloudFront分配:
    • 源域名填你的ECR仓库完整URI(比如99999999999.dkr.ecr.eu-west-1.amazonaws.com),源端口选443,协议设为HTTPS only。
    • 添加自定义域名:把cr.example.com加到分配的自定义域名列表里,关联刚才申请的ACM证书。
    • 关键配置:在行为设置里,强制把Host头设置为ECR的原始URI(不能用默认的Viewer Host Header)——这是让ECR正常响应的核心;另外,缓存策略选CachingDisabled,因为Docker仓库的请求都是动态交互,不需要缓存。
  • 第三步:配置DNS:把自定义域名的CNAME记录指向CloudFront分配的域名(比如d123456abcdef.cloudfront.net)。
  • 使用小技巧:登录的时候还是得用ECR原始域名获取凭证(执行aws ecr get-login-password | docker login --username AWS --password-stdin 99999999999.dkr.ecr.eu-west-1.amazonaws.com),但拉取、推送镜像时直接用自定义域名就行,比如docker push cr.example.com/my-app:v1,CloudFront会自动把请求转发给ECR,同时处理好证书和Host头的问题。

方案二:ECR Public Gallery自定义域名(仅公共仓库)

如果你的镜像仓库是公开的,这个方案最省心:

  • 登录AWS控制台进入ECR Public,找到你的公共仓库,在“自定义域名”选项里绑定你的域名,AWS会自动帮你配置SSL证书和DNS解析,不需要额外操作,直接就能用自定义域名访问公共镜像。不过要注意,这个功能只针对公共仓库,私有仓库用不了。

方案三:部署第三方镜像代理工具(灵活但需运维)

如果需要更复杂的功能,比如镜像缓存、自定义权限控制、多仓库聚合,可以部署Harbor、Nexus这类专业的镜像代理工具:

  • 把ECR配置为代理工具的后端仓库,然后将自定义域名指向代理工具的服务器。
  • 用户拉取、推送镜像时直接和代理工具交互,代理工具负责和ECR通信处理凭证、证书等问题,完全屏蔽ECR的原始域名。
  • 缺点是需要自己部署和维护服务器,增加了运维成本,但适合有复杂需求的团队。

为什么直接CNAME行不通?

直接给ECR URI加CNAME的核心问题有两个:

  1. ECR的SSL证书是绑定自身域名的,自定义域名访问时会出现证书不匹配的错误,Docker客户端会直接拒绝连接。
  2. aws ecr get-login-password生成的凭证是针对ECR原始域名的,当你用自定义域名登录时,Docker会把凭证发送给自定义域名对应的服务器,而ECR只接受针对自身域名的凭证验证,所以必然会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:57:39