我正在尝试从运行在其他服务器(不是 GCE)中的 CoreOS 机器中的 Google 容器注册表下载图像。
我配置了一个新的服务帐户:
core@XXXX ~ $ docker run -t -i -v $(pwd)/keys:/tmp/keys --name gcloud-config ernestoalejo/google-cloud-sdk-with-docker gcloud auth activate-service-account XXXXXXX@developer.gserviceaccount.com --key-file /tmp/keys/key.p12 --project XXXX
Activated service account credentials for: [XXXXXXX@developer.gserviceaccount.com]
该帐户处于活动状态,但是当我尝试下载容器映像时,它返回禁止的 HTTP 状态。
core@XXXX ~ $ /usr/bin/docker run --volumes-from gcloud-config --rm -v /var/run/docker.sock:/var/run/docker.sock ernestoalejo/google-cloud-sdk-with-docker sh -c "gcloud preview docker pull gcr.io/XXXXX/influxdb"
Pulling repository gcr.io/XXXXX/influxdb
time="2015-05-08T06:38:55Z" level="fatal" msg="HTTP code: 403"
ERROR: (gcloud.preview.docker) A Docker command did not run successfully.
Tried to run: 'docker pull gcr.io/XXXXX/influxdb'
Exit code: 1
服务器中只有一个账号,并且配置正确:
core@XXXX ~ $ /usr/bin/docker run --volumes-from gcloud-config --rm -v /var/run/docker.sock:/var/run/docker.sock ernestoalejo/google-cloud-sdk-with-docker sh -c "gcloud auth list"
To set the active account, run:
$ gcloud config set account ``ACCOUNT''
Credentialed accounts:
- XXXXXXXXXXXXX@developer.gserviceaccount.com (active)
如何授权外部机器从注册表下载图像?
注意:图像与此ernestoalejo/google-cloud-sdk-with-docker
相同,google/cloud-sdk
但已修复此问题。
更新:我也尝试过这个答案的解决方案,但没有区别。
PROJECT_ID=XXXXXX
ROBOT=XXXXXX@developer.gserviceaccount.com
gsutil acl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
gsutil -m acl ch -R -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
gsutil defacl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com