GMOアドマーケティングのmizkichです。
GCPにDocker Containerをアップロードするためのコマンドが急に動かなくなりました。
対処法は簡単だったのですがどこにも情報がなかったので、同様に躓いた人用に備忘録を残しておきます。
python3とgcloudを両方使っている方は、文末の環境変数を設定して置いた方が良さそうです。
gcloud dockerが動かない
普段と異なるPCでGCPへコンテナをデプロイしたところ、gcloud dockerが動かなくなっていました。
GCPへコンテナをPUSHすると「ERROR: gcloud crashed (TypeError): a bytes-like object is required, not ‘str’」とエラーがでます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
❯ gcloud docker -- push asia.gcr.io/gmo-am-xxxxxxxxx/xxxxxxxxx-monitor:staging WARNING: `gcloud docker` will not be supported for Docker client versions above 18.03. As an alternative, use `gcloud auth configure-docker` to configure `docker` to use `gcloud` as a credential helper, then use `docker` as you would for non-GCR registries, e.g. `docker pull gcr.io/project-id/my-image`. Add `--verbosity=error` to silence this warning: `gcloud docker --verbosity=error -- pull gcr.io/project-id/my-image`. See: https://cloud.google.com/container-registry/docs/support/deprecation-notices#gcloud-docker ERROR: gcloud crashed (TypeError): a bytes-like object is required, not 'str' If you would like to report this issue, please run the following command: gcloud feedback To check gcloud for common problems, please run the following command: gcloud info --run-diagnostics |
アップロード対象のコンテナを変えても同じエラーが出ます。
「gcloud docker –authorize-only」と認証だけにしても全く同じエラーになります。
このことから、コンテナが悪いのではなくgcloud dockerに問題が発生していると考えました。
原因推測 & 検証
前回の正常動作から本日までに、以下のアップグレードを実施していました。
- gcloud components update
- Docker Desktop Edgeのアップデート
- brew update
- brew cask upgrade
gcloud componentsに不具合があるかと思い、「gcloud components update –version 298.0.0」でロールバックするも効果なしでした。
Google検索で見つけた似たようなエラーの中には、docker-composeのアップデートで直ったとの情報がありました。
Docker Desktop Edgeは最新だったため、Docker Desktop Stableに入れ替えましたが効果なしでした。
brewとbrew caskはロールバックさせたくないので、やや手詰まりです。
エラー解消方法
エラーメッセージ「bytes-like object is required, not ‘str’」がPython系のエラーでしたので、Pythonを入れ替えることにしました。
普段はv3.6.10を利用していますが、gcloudでだけ2.7.16を利用するように変更したところ、エラーが解消されました。
gcloudで使うpythonのバージョンは、以下のコマンドで固定出来ます。
1 |
export CLOUDSDK_PYTHON='/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7' |
.bash_proficeを変更した後は、「source ~/.bash_profile」で更新を適用するのを忘れずに。
まとめ
python3系を使っていると、gcloud系コマンドからちょいちょいエラーが出ます。
gcloudで使うpythonは、環境変数CLOUDSDK_PYTHONで個別に指定出来るので、2系に変えて置いた方が安定するかと思います。
Full Stack Engineer @ GMO AD Marketing, Inc.
DMP(Data Management Platform)の開発運用担当してます。
(Java x Ruby x Kubernetes x BigQuery x Hazelcast x etc)
マイブームは犬と車と登山とスノボ。