1

我尝试使用 Google Container Registry,但它对我不起作用。

我写了以下内容containers.yaml

$ cat containers.yaml
version: v1
kind: Pod
spec:
  containers:
    - name: amazonssh
      image: asia.gcr.io/<project-id>/amazonssh
      imagePullPolicy: Always
 restartPolicy: Always
 dnsPolicy: Default

我通过以下命令运行实例。

$ gcloud compute instances create containervm-amazonssh --image container-vm     --network product-network     --metadata-from-file google-container-manifest=containers.yaml --zone asia-east1-a --machine-type f1-micro

我设置了以下acl权限。

# gsutil acl ch -r -u <project-number>@developer.gserviceaccount.com:R gs://asia.artifacts.<project-id>.appspot.com

但是当 docker pull image from Google Container Registry 时会发生访问被拒绝。

#  docker pull asia.gcr.io/<project-id>.a/amazonssh
Pulling repository asia.gcr.io/<project-id>.a/amazonssh
FATA[0000] Error: Status 403 trying to pull repository <project-id>/amazonssh: "Access denied."
4

2 回答 2

4

您能否从您的实例验证您可以从 Google Cloud Storage 存储桶中读取数据?这可以通过以下方式验证:

$ curl -H 'Metadata-Flavor: Google' $SVC_ACCT/scopes
...
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/devstorage.read_only
...

如果是这样,请尝试:

在 Google Compute Engine 上,您无需使用 gcloud 即可登录:

$ METADATA=http://metadata.google.internal./computeMetadata/v1
$ SVC_ACCT=$METADATA/instance/service-accounts/default
$ ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' $SVC_ACCT/token \
    | cut -d'"' -f 4)
$ docker login -e not@val.id -u _token -p $ACCESS_TOKEN https://gcr.io

然后再次尝试您的 docker pull 命令。

于 2015-07-08T19:24:06.380 回答
0

您在 project-id 之后有一个额外.a的,不确定您是否以这种方式运行命令?

docker pull asia.gcr.io/<project-id>.a/amazonssh

container-vm 有一个gcloud docker -a以 root 身份运行的 cron 作业,因此您应该能够以docker pullroot 身份运行。

启动 container-vm Docker 容器的 kubelet 也了解如何使用 GCR 进行本机身份验证,因此它应该可以正常工作。

请随时通过 gcr-contact@google.com 与我们联系。如果您可以包含您的项目 ID,以及可能来自您的容器虚拟机的 /var/log/kubelet.log,这将很有用。

于 2015-08-27T03:59:37.343 回答