誤ったタグ指定で別イメージ起動『Docker / Kubernetesの話④』
デプロイは成功。
Pod もコンテナも起動している。
それなのに 挙動が明らかにおかしい/昨日と違う。
原因は イメージタグの指定ミス。
Docker / Kubernetes 初学者が必ず一度は踏む、静かで厄介な事故だ。
冒頭の一言要約
イメージ名が同じでも、中身は別物。
タグを誤ると“別のアプリ”が普通に起動する。
症状(あるある)
設定が反映されていない
ログの出方が以前と違う
バージョン差分の機能が見当たらない
ローカルでは動くのに本番だけおかしい
再デプロイしても直らない
「ちゃんと pull したはずなのに違う」
原因と仕組み(なぜ起きるか)
タグを指定せず latest を使っている
タグ名のタイプミス(prod / production など)
期待していたタグと中身が違う
イメージを更新したがタグを上げていない
Kubernetes が既存イメージを再利用している
ローカルとレジストリでタグの意味がズレている
Docker / Kubernetes では
タグ=ただのラベル。
「最新版」「本番用」という意味は、
人間が勝手にそう思っているだけ。
図:同じイメージ名でも中身が違う
app:latest → v1.3
app:prod → v1.2
app:debug → v1.3-debug
↑
タグ違い=別イメージ
切り分け(最短コース)
実際に起動しているイメージ確認
Docker
docker ps
Kubernetes
kubectl get pod <pod> -o wide
イメージID確認
docker inspect <container>
マニフェスト / compose のタグ確認
image: app:xxx
レジストリ上のタグ一覧確認
意図したタグが存在するか
再 pull が発生しているか確認
Kubernetes の imagePullPolicy
今すぐ効く対処(テンプレ)
◆ タグを明示・固定する(推奨)
image: app:1.3.2
→ latest を使わない。
◆ Kubernetes で確実に再取得させる
imagePullPolicy: Always
※ 検証用途限定。本番はタグ固定が基本。
◆ ロールバックしやすい運用
バージョン番号タグを採用
「上書きタグ」を作らない
変更=必ず新タグ
恒久対策/再発防止チェックリスト
latest タグを本番で使わない
タグ命名規則を決める(semver等)
デプロイ前に実行イメージを確認
レジストリのタグ管理を整理
CI/CDでタグ自動付与
imagePullPolicy の意味を理解
compose / manifest をレビュー
「同じ名前=同じ中身」と思わない
落とし穴(やりがちミス)
latest=最新版だと思い込む
タグだけ変えて中身を変えていない
ローカルビルドとレジストリの混同
Kubernetes が pull していないことに気づかない
デプロイ成功=正しいイメージと思う
まとめ(行動指針)
コンテナ運用では、
「何が起動しているか」をタグで管理する。
タグを固定する → 中身を変えたらタグを変える → 実体を確認する。
この3点を守るだけで、
“別物が動いていた”事故は確実に防げる。
