このチュートリアル を使用して、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 list
およびdocker info
両方のサービスに接続していることを教えてください。
私が欠けているものはありますか?
gsutil
を使用してACLをチェックし、バケットへの書き込み権限があることを確認します。
$ gsutil acl get gs://<my-bucket>
使用しているアカウントがどのグループに属しているかを確認する必要があります(「所有者」、「編集者」、「閲覧者」など)。
[〜#〜] edit [〜#〜]:私は最近、これと非常によく似た問題を経験しました。@ lampisが彼の投稿で言及しているように、これは、VMからイメージをプッシュしようとしたときに、正しいアクセス許可スコープが設定されていなかったためです。残念ながら、現在、a VMが作成されたので、VM(ディスクが自動削除に設定されていることを確認してください!))を削除し、VM正しいスコープで( 'compute-rw'、 'storage-rw'で十分なようです)。ただし、それほど時間はかかりません;-)。
こちらの--scopes
セクションをご覧ください: https://cloud.google.com/sdk/gcloud/reference/compute/instances/create
私にとっては、行の先頭にgcloud
を付けるのを忘れていました(そして、docker
がどのように認証されるのか疑問に思いました):
$ gcloud docker Push <image>
私はこれを見ていますが、断続的にです。例えばエラーが拒否される場合があります:リクエスト "/ v2/...."からの "latest"のアクセスが拒否されましたが、再試行すると機能します。
他の誰かがこれを経験していますか?
ターミナルで、以下のコードを実行します
$ Sudo docker login -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://[HOSTNAME]
Where-[HOSTNAME]は、コンテナのレジストリの場所です(gcr.io、us.gcr.io、eu.gcr.io、またはasia.gcr.ioのいずれかです)。 $ Sudo docker images
)を実行して、タグ付けされた画像を確認してください。
これで問題が解決しない場合は、VMのアクセススコープを確認してみてください。
Docker 1.7.0を使用している場合、認証の処理方法に重大な変更があり、gcloud docker
とdocker login
を組み合わせて使用しているユーザーに影響します。
gcloud components update
から最新バージョンのgcloudを使用していることを確認してください。
これまでのところ、これはgcloud docker
、docker-compose
、およびDocker認証ファイルの読み取り/書き込みを行っていた他のツールに影響を与えるようです。
うまくいけば、これが役立つでしょう。
ここでも同じ問題があります。 https://cloud.google.com/tools/container-registry/#access_denied のトラブルシューティングセクションはあまり役に立ちませんでした。 DockerとGCloudを完全に更新しました。他に何をすべきかわからない。
ところで、私は「gcr.io」にプッシュしようとしています。
修繕。私は開発マシンとしてコンピューティングエンジンでVMを使用していましたが、ストレージで十分なリグネスを提供していなかったようです。
今日、Dockerコンテナをプッシュすると、Google KubernetesEngineで実行されているJenkins内でもこのエラーが発生しました。その理由は、以前に行ったgcpでのノードプールノードバージョンの1.9.6-gke.1から1.9.7-gke.0へのアップグレードでした。ダウングレード後に再び動作しました。
アクセスが拒否されましたでも同じ問題が発生し、タグを使用して新しいイメージを作成することで解決しました:
docker tag IMAGE_WITH_ACCESS_DENIED gcr.io/my-project/my-new-image:test
その後、私はプッシュコンテナレジストリにそれをすることができました:
gcloud docker -- Push gcr.io/my-project/my-new-image:test
現在のマシンからgcloudにログインする必要があります。
gcloud auth login