モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

GKEでdocker push出来ない問題

GKEを使っていて、docker imageをdocker buildで作るところまでは良かったのですが、docker pushしようとすると権限がないと言われてしまってどうしてもpushできない、という問題にはまりました。

denied: Permission "artifactregistry.repositories.uploadArtifacts" denied on resource "projects/example/locations/asia-northeast1/repositories/example" (or it may not exist)

権限自体はオーナーになっているためフルで割り当てられているのにどうして…?となっていました。
オーナー権限があるため、リポジトリの登録なんかは問題なく出来てしまいます。


でもやはり権限の問題でした。

エラーメッセージから検索してこちらの方のエントリーでわかりました。

www.pospome.work


dockerイメージをpushする前に、リポジトリ認証の設定が必要で、それはGKEのイメージをpushする先のホスト毎に必要なのに、それをやっていませんでした。

https://cloud.google.com/artifact-registry/docs/docker/store-docker-container-images?hl=ja#auth

イメージを push または pull する前に、Google Cloud CLI を使用して Artifact Registry に対するリクエストを認証します。


リージョン us-central1 の Docker リポジトリの認証を設定するには、次のコマンドを実行します。

$ gcloud auth configure-docker us-central1-docker.pkg.dev


自分はてっきり、

$ gcloud auth configure-docker

すると、gcr.ioとかstaging-k8s.gcr.ioとかのcredHelpersが表示されて

gcloud credential helpers already registered correctly.

と言われるので、もう必要な設定できているのだと思っていました。


が、これだけだとダメで、例えば「asia-northeast1-docker.pkg.dev」へpushするのなら

$ gcloud auth configure-docker asia-northeast1-docker.pkg.dev

として使うGKEのホストを登録してやらないとダメなのでした。