成功连接私有 ECR 注册表并不等于镜像拉取完成。ECR 提供清单,而镜像层存放在 Amazon S3 中。因此,只覆盖注册表的代理绕过,可能让层下载走上另一条路径。

通过 VPC 终端节点实现私有访问时,两条路径都要检查:

  • ECR 接口终端节点及其私有 DNS 配置。
  • S3 终端节点、与之关联的路由表,以及允许访问 ECR 层存储桶的策略。

然后把相关的绕过名称写到执行拉取的进程上。对于已有 daemon.json 代理配置的原生 Docker Engine,us-east-2 的示例配置如下:

{
  "proxies": {
    "http-proxy": "http://proxy.example:8080",
    "https-proxy": "http://proxy.example:8080",
    "no-proxy": "123456789012.dkr.ecr.us-east-2.amazonaws.com,prod-us-east-2-starport-layer-bucket.s3.us-east-2.amazonaws.com"
  }
}

把需要的条目与守护进程的其他设置及现有绕过列表合并。如果其他公共注册表下载可能走公共中间层,HTTP 代理列表可提供免账号代理 URL 的候选;同时保留私有 ECR 和 S3 的绕过项。请把账号、区域和层下载主机名替换为拉取实际使用的名称。S3 的命名形式和终端节点配置可能不同;本示例并非 AWS 终端节点的完整清单。应用守护进程配置需要按计划重启守护进程。Docker Desktop 使用自己的代理设置。

绕过只是选择直连路径。它不能创建缺失的 S3 终端节点、挂载路由表、授予存储桶访问权限或修复私有 DNS。在把绕过范围扩大到宽泛的 AWS 域名之前,请先确认这些依赖。

Docker 客户端的容器代理设置并不会配置守护进程的镜像下载。同样,获取 ECR 登录凭据的 AWS CLI 命令也有自己的代理配置;如果这个独立请求也需要私有访问,请把它的 API 目标一并纳入。

相关文章