推送docker容器时,Google容器注册表访问被拒绝

时间:2015-07-05 22:25:52

标签: docker google-cloud-platform gcloud google-container-registry

我尝试使用this tutorial将我的docker容器推送到google容器注册表,但是当我运行时

gcloud docker push b.gcr.io/my-bucket/image-name

我收到错误:

The push refers to a repository [b.gcr.io/my-bucket/my-image] (len: 1)
Sending image list
Error: Status 403 trying to push repository my-bucket/my-image: "Access denied."

我无法找到更多解释(没有-D, - debug, - verbose参数被识别),gcloud auth listdocker info告诉我我已连接到两种服务。

我遗失了什么?

10 个答案:

答案 0 :(得分:5)

创建Google Cloud VM实例时,请确保其具有足够的访问权限。

选项1

在Identity and API访问权限下,选择允许对所有Cloud API的完全访问权限

enter image description here

选项2(推荐)

在Identity and API访问下,选择为每个API设置访问权限,然后选择 Read Write for Storage。

enter image description here

答案 1 :(得分:3)

使用gsutil检查ACL以确保您有权写入存储桶:

$ gsutil acl get gs://<my-bucket>

您需要检查您正在使用的帐户所在的群组(&#39;所有者&#39;,&#39;编辑&#39;观看者&#39;等)

编辑:我最近遇到过一个非常类似的问题,正如@lampis在帖子中提到的那样,因为我创建的时候没有设置正确的权限范围VM我试图推动图像。不幸的是,一旦创建了VM,目前无法更改范围,因此您必须删除VM(确保将磁盘设置为自动删除!)并重新创建具有正确范围的VM(& #39; compute-rw&#39;,&#39; storage-rw&#39;似乎已足够)。它不需要很长时间; - )。

请参阅此处的--scopes部分:https://cloud.google.com/sdk/gcloud/reference/compute/instances/create

答案 2 :(得分:3)

对我来说,我忘了在gcloud前加上(我想知道docker如何进行身份验证):

$ gcloud docker push <image>

答案 3 :(得分:3)

我看到的却是间歇性的。例如我可能会拒绝错误:请求“/ v2 / ....”中的“最新”权限被拒绝,但是再次尝试时它会起作用。

还有其他人遇到过这种情况吗?

答案 4 :(得分:1)

如果您使用的是Docker 1.7.0,它们处理身份验证的方式发生了重大变化,这会影响使用gcloud dockerdocker login混合的用户。

请确保您使用的是最新版本的gcloud:gcloud components update

到目前为止,这似乎会影响gcloud dockerdocker-compose以及其他正在读取/写入Docker auth文件的工具。

希望这有帮助。

答案 5 :(得分:1)

此处的问题相同,https://cloud.google.com/tools/container-registry/#access_denied的问题排查部分并非常有帮助。我已经完全更新了Docker和GCloud。不知道还能做什么。

顺便说一句,我正试图推进&#34; gcr.io&#34;。

固定。我在计算引擎中使用VM作为我的开发机器,看起来我没有给它足够的存储空间。

答案 6 :(得分:1)

访问被拒绝我遇到了同样的问题,我使用标记创建新图片解决了这个问题:

docker tag IMAGE_WITH_ACCESS_DENIED gcr.io/my-project/my-new-image:test

之后我可以 PUSH 它到Container注册表:

gcloud docker -- push gcr.io/my-project/my-new-image:test

答案 7 :(得分:1)

您需要从您所在的计算机登录到gcloud:

$path = 'doc/20180719-ASK FIDC_EVOLUCAO_COTA.xls';
$inputFileType = PHPExcel_IOFactory::identify($path);

$reader = PHPExcel_IOFactory::createReader($inputFileType);
$reader->setReadDataOnly(true);
$reader->setInputEncoding('ISO-8859-1');
//$reader->setDelimiter("\t");

$excel = $reader->load($path);

var_dump($excel);
echo $inputFileType;

$writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
$writer->setUseBOM(true);
$writer->save('data.csv');

echo 'File saved to csv format';

答案 8 :(得分:1)

在您的终端中,运行下面的代码

$ sudo docker login -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://[HOSTNAME]

位置 -[HOSTNAME]是您的容器注册表位置(可以是gcr.io,us.gcr.io,eu.gcr.io或asia.gcr.io)。通过运行$ sudo docker images)来检查已标记的图像。

如果不能解决问题,请尝试查看VM的访问范围。

答案 9 :(得分:0)

今天我在推送Docker容器时在Google Kubernetes Engine上运行的Jenkins中也出现了这个错误。原因是节点池节点版本从之前的gcp中的1.9.6-gke.1升级到1.9.7-gke.0。降级后再次工作。