はじめに
Dockerを活用したプロジェクトを進めていると、「デプロイ済みのイメージに特定のファイルが正しく含まれているか」や「環境変数がどう反映されているか」などを直接確認したい場面があります。
特に、ローカル環境では動くのに特定環境でエラーが出る場合、コンテナ内のソースコードやキャッシュの状態を直接覗くのが一番早かったりします。今回は、Google Cloud Shellを使って、リモートリポジトリ(Artifact Registryなど)にあるイメージを直接起動し、中身を調査する場面があったため手順を記述します。
Cloud Shellでコンテナに入る方法
通常、コンテナはアプリケーションを実行するために動かしますが、調査目的の場合は –entrypoint を書き換えて、シェル(/bin/sh や /bin/bash)を起動するのがコツです。
Cloud Shellを起動し、以下のコマンドを実行します。
# コンテナの中に入る(entrypointを上書きしてシェルを起動) docker run -it --rm --entrypoint /bin/sh \ asia-northeast1-docker.pkg/project-a/repository-a/project-jobs@sha256:xxxxxxxxxxxxxxxxxx(コンテナイメージURL)
・-it: インタラクティブモードで擬似ターミナルを割り当てます。
・–rm: 調査が終わってコンテナを抜けたら、自動でコンテナを削除します。
・–entrypoint /bin/sh: 本来起動するはずのプログラムの代わりに、コマンド入力を受け付けるシェルを起動します。
内容を確認する(ソースの確認など)
コンテナ内に入ったら、まずは目的のファイルがどこにあるかを確認します。
1. ファイルを探す
ファイル名の一部がわかっている場合は find コマンドが便利です。
# Test.php というファイルを探す find / -name Test.php
2. ファイルの中身を表示する
パスが判明したら、cat コマンドで内容を確認します。
# 見つかったパスを指定して表示 cat /app/Console/Commands/Test.php
これで、デプロイされたコードが最新のものか、修正が反映されているかを確実にチェックできます。
3. artisanコマンド実行(Laravel等の場合)
artisanコマンドが実行できるため、例えばアプリケーション(今回の例ではLaravel)の挙動がおかしい場合は、コンテナ内で直接キャッシュクリアを試すことも可能です。
# プロジェクトディレクトリへ移動 cd /data/project/xxxxx/laravel # 設定・キャッシュのクリア php artisan config:clear php artisan cache:clear
※注:–rm オプションで起動している場合、ここでの変更はイメージ自体には保存されませんが、実行時の挙動確認には役立ちます。
最後に
Cloud Shellを使って、ローカルに重いイメージをpullすることなく、ブラウザ側でコンテナ内部のデバッグが完結します。「イメージの中身がブラックボックスでわからない」というときは、今回のように –entrypoint を書き換えて中に入ってみるのが最も確実かと思います。