Docker Engine daemon.json:为私有 ECR 和 S3 设置代理绕过
通过 VPC 终端节点拉取私有 ECR 镜像时,绕过 HTTP 代理需一并考虑 S3 层下载。
成功连接私有 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 目标一并纳入。