GCE VM环境下如何为containerd CLI工具ctr配置GCR访问权限
ctr拉取GCR镜像401未授权问题解决方案
报错本质是ctr缺少GCR的身份认证凭证,按以下步骤操作即可解决:
方法一:单次拉取时指定认证参数(无需持久化配置)
- 第一步:获取GCP访问令牌,GCE VM实例默认绑定服务账号的前提下,直接执行如下命令生成令牌:
TOKEN=$(gcloud auth print-access-token) - 第二步:拉取镜像时携带认证参数,GCR固定用户名为
oauth2accesstoken,密码为上一步生成的令牌:sudo ctr images pull --user oauth2accesstoken:$TOKEN gcr.io/<你的镜像路径>:<标签>
方法二:持久化配置,无需每次拉取携带参数
方式1:复用Docker认证配置(无Docker也可使用)
如果你有GCP服务账号的JSON密钥文件,直接执行如下命令生成认证配置即可:
- 创建Docker配置目录:
mkdir -p ~/.docker - 写入认证信息:
cat <服务账号密钥文件路径> | docker login -u _json_key --password-stdin https://gcr.io
如果使用sudo执行ctr命令,需要将生成的~/.docker/config.json复制到root用户的对应路径下:sudo cp ~/.docker/config.json /root/.docker/
方式2:直接修改containerd配置文件
编辑/etc/containerd/config.toml,找到对应registry配置段,添加GCR的认证信息:
[plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io".auth] username = "oauth2accesstoken" password = "<你的GCP访问令牌>"
修改完成后重启containerd服务生效:sudo systemctl restart containerd
注意事项
你使用的服务账号需要被授予roles/storage.objectViewer权限,对应GCR后端存储Bucket的读权限,否则即使配置了正确的认证信息也会拉取失败。
内容的提问来源于stack exchange,提问作者Dagang Wei
相关产品推荐
相关产品推荐

