gcloudインストール

Dockerでgcloud CLIをインストールするときにPython依存エラーが出る問題の解決方法

Dockerfile内でgcloud CLI(Google Cloud CLI)をインストールしようとした際に、次のようなエラーが発生しました。

The following packages have unmet dependencies:
 google-cloud-cli : Depends: python3 (< 3.13) but 3.13.2-2 is to be installed

これは、Dockerのベースイメージで使用されているPythonのバージョンが新しすぎて、gcloud CLIの依存関係を満たせないために起こったようでした。 (20250407時点)

原因

Google Cloud CLIはPythonの特定バージョンに依存しています。現在、Python 3.13以降には対応していないため、このエラーが発生します。

解決方法

この問題の根本的な解決方法としては、Pythonに依存しないバイナリ版のGoogle Cloud CLIを利用して回避してみました。

最新版を常に取得してインストールする方法

Google公式のインストールスクリプトを使えば、常に最新版を自動的にインストールできます。 curl | bash は取得したスクリプトをそのまま実行するため、Dockerfile内で使う場合も公式URLであることを確認し、必要に応じてバージョン固定を検討します。

ENV CLOUDSDK_INSTALL_DIR=/usr/local/google-cloud-sdk

RUN curl -fsSL https://sdk.cloud.google.com | bash -s -- \
    --disable-prompts \
    --install-dir=${CLOUDSDK_INSTALL_DIR} && \
    ln -s ${CLOUDSDK_INSTALL_DIR}/bin/gcloud /usr/local/bin/gcloud && \
    gcloud --version
  • --disable-prompts: インタラクティブな入力を抑制します。
  • --install-dir: インストール先のディレクトリを指定します。
  • インストール後、PATHが通った場所にシンボリックリンクを作成しています。

シンボリックリンクを使いたくない場合の方法

環境変数PATHを直接設定する方法もあります。

ENV CLOUDSDK_INSTALL_DIR=/usr/local/google-cloud-sdk

RUN curl -fsSL https://sdk.cloud.google.com | bash -s -- \
    --disable-prompts \
    --install-dir=${CLOUDSDK_INSTALL_DIR}

ENV PATH="${CLOUDSDK_INSTALL_DIR}/bin:${PATH}"

RUN gcloud --version

なぜ直接/usr/local/binに単一ファイルを配置できないのか?

Google Cloud CLIはPythonやライブラリなど多くの関連ファイルを必要とするため、単一バイナリだけを直接配置することは現実的ではありません。

したがって、推奨される方法はインストールディレクトリを設け、そこにパスを通す、またはシンボリックリンクを張る方法です。

結論

Dockerfile内でGoogle Cloud CLIをインストールする際のベストプラクティスは、以下の方法になります。

ENV CLOUDSDK_INSTALL_DIR=/usr/local/google-cloud-sdk

RUN curl -fsSL https://sdk.cloud.google.com | bash -s -- \
    --disable-prompts \
    --install-dir=${CLOUDSDK_INSTALL_DIR} && \
    ln -s ${CLOUDSDK_INSTALL_DIR}/bin/gcloud /usr/local/bin/gcloud && \
    gcloud --version