使用 API v2 从 azure CR 获取单个层 blob
fetch individual layer blobs from azure CR using API v2
我正在尝试为 Azure 注册表重新实现 docker pull
。过去,我已经按照官方文档针对 Docker Hub 成功地做到了这一点。
对于 Azure,我设法通过 _catalog
列出存储库标签并获取清单 (/manifests
),但是我遇到了针对 /blobs
的身份验证问题,我收到了:
<Code>InvalidAuthenticationInfo</Code><Message>Authentication information is not given in the correct format. Check the value of Authorization header.
我的代码类似于:
const headers: any = {
Accept: mediaType
};
const config: any = {
method: "GET",
uri: `https://${registryConfig.base}/v2/${repo}/blobs/${sha}`,
headers
};
if (token) {
headers.Authorization = `Bearer ${token}`;
} else {
config.auth = { username, password };
}
return request(config)
}
这适用于我使用不记名令牌的 Docker 集线器。关于如何针对 Azure 的 blob 服务进行正确身份验证的任何提示?
谢谢!
问题是由于自动重定向(以及 Azure 的某些 unexpected/non-documented 行为)造成的。
针对 /blobs
端点的调用(如果它们经过适当的身份验证)包括一个 Location
header,它由一个包含所需 blob 的不同 URI 组成。
但是,如果您尝试使用授权 header 调用它,它会失败并出现上述错误。
我正在尝试为 Azure 注册表重新实现 docker pull
。过去,我已经按照官方文档针对 Docker Hub 成功地做到了这一点。
对于 Azure,我设法通过 _catalog
列出存储库标签并获取清单 (/manifests
),但是我遇到了针对 /blobs
的身份验证问题,我收到了:
<Code>InvalidAuthenticationInfo</Code><Message>Authentication information is not given in the correct format. Check the value of Authorization header.
我的代码类似于:
const headers: any = {
Accept: mediaType
};
const config: any = {
method: "GET",
uri: `https://${registryConfig.base}/v2/${repo}/blobs/${sha}`,
headers
};
if (token) {
headers.Authorization = `Bearer ${token}`;
} else {
config.auth = { username, password };
}
return request(config)
}
这适用于我使用不记名令牌的 Docker 集线器。关于如何针对 Azure 的 blob 服务进行正确身份验证的任何提示?
谢谢!
问题是由于自动重定向(以及 Azure 的某些 unexpected/non-documented 行为)造成的。
针对 /blobs
端点的调用(如果它们经过适当的身份验证)包括一个 Location
header,它由一个包含所需 blob 的不同 URI 组成。
但是,如果您尝试使用授权 header 调用它,它会失败并出现上述错误。