コンテナーの実行を開始するCoreOS dockerホストがありますが、dockerコマンドを使用してgoogleコンテナープライベートレジストリからイメージを取得しようとすると( https://cloud.google.com/tools/ container-registry / )、403を取得します。検索を行いましたが、認証を添付する方法(またはdocker loginコマンドで使用するuser + passバンドルを生成する場所)がわかりません。
誰かがグーグルのプライベートコンテナから運を引き出したことがありますか? coreosにはPythonが付属していないため、gcloudコマンドをインストールできません。これは要件です
docker run -p 80:80 gcr.io/prj_name/image_name
Unable to find image 'gcr.io/prj_name/image_name:latest' locally
Pulling repository gcr.io/prj_name/image_name
FATA[0000] HTTP code: 403
更新:@mattmoorと@Jesseから回答を得た後:
私が引っ張っているマシンにはdevaccessがあります
curl -H 'Metadata-Flavor: Google' http://metadata.google.internal./computeMetadata/v1/instance/service-accounts/default/scopes
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/datastore
----> https://www.googleapis.com/auth/devstorage.read_only
https://www.googleapis.com/auth/logging.admin
https://www.googleapis.com/auth/sqlservice.admin
https://www.googleapis.com/auth/taskqueue
https://www.googleapis.com/auth/userinfo.email
さらに、_tokenログインメソッドを使用してみました
jenkins@riskjenkins:/home/andre$ ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' 'http://metadata.google.internal./computeMetadata/v1/instance/service-accounts/default/token' | cut -d'"' -f 4)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 142 100 142 0 0 14686 0 --:--:-- --:--:-- --:--:-- 15777
jenkins@riskjenkins:/home/andre$ echo $ACCESS_TOKEN
**************(redacted, but looks valid)
jenkins@riskjenkins:/home/andre$ docker login -e [email protected] -u _token -p $ACCESS_TOKEN http://gcr.io
Login Succeeded
jenkins@riskjenkins:/home/andre$ docker run gcr.io/prj_name/image_name
Unable to find image 'gcr.io/prj_name/image_name:latest' locally
Pulling repository gcr.io/prj_name/image_name
FATA[0000] HTTP code: 403
Google Container Registryの認証スキームは、単に次のものを使用することです。
username: '_token'
password: {oauth access token}
Google Compute Engineでは、without 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 [email protected] -u '_token' -p $ACCESS_TOKEN https://gcr.io
{asia、eu、us、b} .gcr.ioの更新
ローカライズされたリポジトリでホストされているリポジトリにアクセスするには、上記のdocker login
コマンドで適切なホスト名にログインする必要があります。
_ tokenを囲む引用符の更新
Dockerバージョン1.8の時点では、dockerログインにはqoutesであるか文字で始まる-uオプションが必要です。
診断のヒント...
次の方法で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
...
注:「docker pull」には「read_only」が必要ですが、「docker Push」が必要です「read_write」が必要です。
このロボットが別のプロジェクトのバケットにアクセスできるようにするには、いくつかの手順があります。
まず、VMサービスアカウント(ロボット)のIDを次の方法で見つけます。
$ curl -H 'Metadata-Flavor: Google' $SVC_ACCT/email
[email protected]
次に、更新する3つの重要なACLがあります。
1)バケットACL(リストオブジェクトなどに必要)
PROJECT_ID=correct-answer-42
[email protected]
gsutil acl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
2)バケットのデフォルトACL(将来の#3のテンプレート)
gsutil defacl ch -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
3)オブジェクトACL(バケットが空でない場合にのみ必要)
gsutil -m acl ch -R -u $ROBOT:R gs://artifacts.$PROJECT_ID.appspot.com
これがまだ公式ドキュメントに含まれていない理由の1つは、より優れた高レベルのストーリーが必要なことですが、tl; drはGCS ACLを尊重しています。
ここでの答えは、Google Compute Engineインスタンス内からdockerにアクセスすることです。
Vanilla dockerを使用して、Google Compute Engineにないマシン(つまりローカル)でGoogle Container Registryを操作する場合は、 Googleの指示に従って を実行できます。
2つの主な方法は、アクセストークンまたはJSONキーファイルを使用することです。
_token
および_json_key
は、ユーザー名に指定する実際の値です(-u
)
アクセストークン
$ docker login -e [email protected] -u _token -p "$(gcloud auth print-access-token)" https://gcr.io
JSONキーファイル
$ docker login -e [email protected] -u _json_key -p "$(cat keyfile.json)" https://gcr.io
キーファイルを作成するには、次の手順に従います。
2つの公式な方法 があります。
$ docker login -e [email protected] -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://gcr.io
$ docker login -e [email protected] -u _json_key -p "$JSON_KEY" https://gcr.io
_注:電子メールは使用されないため、必要なものを何でも入力できます。
_gcr.io
_を Google Container Registry に表示されるドメインに変更します(例:_eu.gcr.io
_)。
オプション(1)は一時トークンのみを提供するため、おそらくオプション(2)が必要です。それを取得するには_$JSON_KEY
_:
Docker Registry (read-only)
など、必要なものkeyfile.json
_としてダウンロードJSON_KEY=$(cat keyfile.json | tr '\n' ' ')
ログインしたら、_docker pull
_を実行するだけです。更新された_~/.dockercfg
_をコピーして、設定を保持することもできます。
VMを作成したときに、レジストリから読み取れるようにするために必要なスコープを与えましたか?
gcloud compute instance create INSTANCE\--scopes https://www.googleapis.com/auth/devstorage.read_write
その場合、それ以上の認証は必要ありません。
公式の Google Container Registry Authプラグイン が公開されています。あなたはそれを試して、フィードバック/報告の問題を残して大歓迎です。