无法使用Docker运行时,如何用ctr/crictl/nerdctl登录ECR拉取镜像?
使用ctr、crictl、nerdctl登录AWS ECR的命令
ECR登录的核心逻辑都是用aws ecr get-login-password获取的临时密码,配合固定用户名AWS完成registry身份验证,不同工具仅参数格式有差异,以下是对应命令:
1. ctr(containerd原生命令行工具)
直接用管道传入密码完成登录,若需指定K8s相关命名空间,可追加--namespace k8s.io参数:
aws ecr get-login-password --region <你的区域> | ctr auth login --username AWS --password-stdin <你的AWS账户ID>.dkr.ecr.<你的区域>.amazonaws.com
2. crictl(K8s容器运行时CLI)
crictl没有独立的login命令,可复用containerd的auth配置,或在拉取镜像时临时传入认证信息:
- 复用ctr的登录配置:直接执行上面的ctr登录命令,crictl默认会读取containerd的auth信息
- 拉取时临时注入认证:
export ECR_PASSWORD=$(aws ecr get-login-password --region <你的区域>) export REGISTRY_AUTH=$(echo -n "AWS:${ECR_PASSWORD}" | base64 -w 0) crictl pull --auth "${REGISTRY_AUTH}" <你的AWS账户ID>.dkr.ecr.<你的区域>.amazonaws.com/<镜像名>:<标签>
3. nerdctl(兼容Docker CLI的containerd工具)
命令逻辑和Docker完全一致,直接替换docker为nerdctl即可:
aws ecr get-login-password --region <你的区域> | nerdctl login --username AWS --password-stdin <你的AWS账户ID>.dkr.ecr.<你的区域>.amazonaws.com
内容的提问来源于stack exchange,提问作者winterlyrock
相关产品推荐
相关产品推荐

