見出し画像

誤ったタグ指定で別イメージ起動『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
      ↑
タグ違い=別イメージ

切り分け(最短コース)

  1. 実際に起動しているイメージ確認

    • Docker

      1. docker ps

    • Kubernetes

      1. kubectl get pod <pod> -o wide

  2. イメージID確認

    1. docker inspect <container>

  3. マニフェスト / compose のタグ確認

    • image: app:xxx

  4. レジストリ上のタグ一覧確認

    • 意図したタグが存在するか

  5. 再 pull が発生しているか確認

    • Kubernetes の imagePullPolicy


今すぐ効く対処(テンプレ)

◆ タグを明示・固定する(推奨)

image: app:1.3.2

latest を使わない


◆ Kubernetes で確実に再取得させる

imagePullPolicy: Always

※ 検証用途限定。本番はタグ固定が基本。


◆ ロールバックしやすい運用

  • バージョン番号タグを採用

  • 「上書きタグ」を作らない

  • 変更=必ず新タグ


恒久対策/再発防止チェックリスト

  • latest タグを本番で使わない

  • タグ命名規則を決める(semver等)

  • デプロイ前に実行イメージを確認

  • レジストリのタグ管理を整理

  • CI/CDでタグ自動付与

  • imagePullPolicy の意味を理解

  • compose / manifest をレビュー

  • 「同じ名前=同じ中身」と思わない


落とし穴(やりがちミス)

  • latest=最新版だと思い込む

  • タグだけ変えて中身を変えていない

  • ローカルビルドとレジストリの混同

  • Kubernetes が pull していないことに気づかない

  • デプロイ成功=正しいイメージと思う


まとめ(行動指針)

コンテナ運用では、
「何が起動しているか」をタグで管理する

タグを固定する → 中身を変えたらタグを変える → 実体を確認する。
この3点を守るだけで、
“別物が動いていた”事故は確実に防げる。

いいなと思ったら応援しよう!