无法从WSL(Ubuntu 24.04 LTS)推送至Azure容器注册表
从WSL(Ubuntu 24.04 LTS)向Azure Container Registry(ACR)推送镜像时,收到授权错误:
unauthorized: {"errors":[{"code":"UNAUTHORIZED","message":"authentication required, visit https://aka.ms/acr/authorization for more information."}]}
已完成的排查步骤:
- ACR已启用管理员用户
- 安装helm和notary后,
az acr health-check -n <myacr> -y执行成功,完成拉取验证、DNS查询、令牌获取、Docker Daemon可用性检查 - Docker及ACR登录正常,
cat ~/.docker/config.json显示auths包含index.docker.io和目标ACR的配置 az acr show --name <myacr>显示publicNetworkAccess已启用,多数策略禁用,无异常配置- 查阅官方排查文档未找到有效思路,未使用代理,排除防火墙问题(健康检查已通过)
重新验证ACR登录凭据
手动执行docker login <myacr>.azurecr.io,输入管理员用户名和密码后立即尝试推送,避免config.json中存储的凭据过期或错误。检查镜像标签格式
确保镜像标签严格符合ACR规范:<acr-name>.azurecr.io/<repository-name>:<tag>,例如先执行docker tag local-image <myacr>.azurecr.io/my-repo:v1,再推送。清理Docker凭据缓存
执行docker logout <myacr>.azurecr.io后重新登录,或直接删除~/.docker/config.json文件再重新配置登录,清除可能存在的无效缓存凭据。使用Azure CLI自动登录ACR
运行az acr login --name <myacr>,该命令会自动获取临时访问令牌并配置Docker,跳过手动输入凭据的环节,避免人为错误。检查角色权限(若使用服务主体)
若通过服务主体访问ACR,确认该主体已被分配AcrPush角色。可执行az role assignment list --assignee <服务主体ID> --scope /subscriptions/<订阅ID>/resourceGroups/<资源组>/providers/Microsoft.ContainerRegistry/registries/<myacr>验证权限配置。确认WSL与Docker后端的连接
若使用Docker Desktop作为WSL的Docker后端,检查echo $DOCKER_HOST是否返回正确的套接字路径,同时在Docker Desktop设置中确认已启用对应Ubuntu发行版的WSL集成。
内容的提问来源于stack exchange,提问作者sqlsolver

