python3の入った環境でgcloud dockerが動かなくなった件

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’」とエラーがでます。

 

アップロード対象のコンテナを変えても同じエラーが出ます。
gcloud docker –authorize-only」と認証だけにしても全く同じエラーになります。

このことから、コンテナが悪いのではなくgcloud dockerに問題が発生していると考えました。


原因推測 & 検証

前回の正常動作から本日までに、以下のアップグレードを実施していました。

  1. gcloud components update
  2. Docker Desktop Edgeのアップデート
  3. brew update
  4. 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のバージョンは、以下のコマンドで固定出来ます。

.bash_proficeを変更した後は、「source ~/.bash_profile」で更新を適用するのを忘れずに。


まとめ

python3系を使っていると、gcloud系コマンドからちょいちょいエラーが出ます。

gcloudで使うpythonは、環境変数CLOUDSDK_PYTHONで個別に指定出来るので、2系に変えて置いた方が安定するかと思います。