サーバー ソフトウェア セキュリティ 公開日 2026.04.21 更新日 2026.04.21

Docker本番運用でよくある事故と確認チェックリスト|データ・更新・監視の落とし穴

Dockerを本番運用するときによくある事故を、latestタグ、volume削除、バックアップ未確認、ログ消失、ポート公開、root実行、監視不足の観点からチェックリストで整理します。

先に要点

Dockerは、開発環境をそろえたり、アプリをコンテナとして配布したりするうえでかなり便利です。
ただし、本番運用で使うときは「コンテナだから安全」「作り直せるから安心」と考えると、足元をすくわれます。

実際に怖いのは、Dockerそのものの難しさより、運用の思い込みです。
データは残っていると思っていた。latest のまま再起動した。ログがコンテナごと消えた。DBを外へ公開していた。バックアップはあるが戻したことがない。こういう事故は、小規模運用でも普通に起こります。

この記事では、Dockerを本番で使うときによくある事故と、公開前・運用中に確認したいチェックリストを整理します。
Docker Composeを本番で使う判断は、Docker Composeは本番で使っていい?小規模運用の判断基準と注意点 もあわせて読むとつながりやすいです。

この記事では、2026年4月21日時点で Docker Docs のセキュリティ、Dockerfile best practices、volume、backup/restore関連の情報を確認しながら整理しています。

事故1:latestタグで本番が変わる

本番で latest タグを使うと、再pullや再デプロイのタイミングで、意図しないバージョンが動くことがあります。
開発や検証なら便利でも、本番では「昨日と同じものを動かしている」と説明しづらくなります。

services:
  app:
    image: example/app:latest

この形だと、いつのイメージなのか、どのコミットに対応しているのか、ロールバック先は何かが曖昧です。

本番では、少なくとも次を決めます。

  • v1.4.220260421-1326 のようにタグを固定する
  • GitコミットSHAとイメージタグを対応させる
  • どのタグを本番で動かしているか記録する
  • 戻すタグを残す
  • ベースイメージも不用意に latest にしない

Docker公式のDockerfileベストプラクティスでも、イメージは再作成しやすく一時的なものとして扱い、プロダクション向けにはより小さく目的に合ったベースイメージを検討する考え方が示されています。
本番では「動けばよい」より「同じものを再現できる」ことが大切です。

事故2:volumeを消してデータを失う

Docker運用で一番分かりやすく痛い事故は、データ消失です。
特に Docker Composedocker compose down -v を実行すると、ボリュームも削除対象になります。

開発環境を初期化するなら便利なこともあります。
しかし、本番や検証環境でデータベースのデータをnamed volumeに置いている場合、意味を理解せずに実行すると大事故になります。

確認するポイントは次の通りです。

  • データベースの保存先がvolumeになっているか
  • どのvolumeがどのサービスに対応するか分かるか
  • down -v を本番手順に入れていないか
  • volume削除前にバックアップがあるか
  • 復元手順を試したことがあるか

volumeの基本は、Dockerのvolumeとは?DBデータを消さないための永続化の基本 で詳しく整理しています。

事故3:バックアップはあるが戻せない

バックアップファイルがあるだけでは、復旧できるとは限りません。
パスワードが分からない、DBバージョンが違う、ファイル権限が崩れる、アップロードファイルだけ漏れている、復元コマンドが古い、といったことが起きます。

本番でDockerを使うなら、バックアップは次の単位で分けて考えます。

対象 見ること
データベース SQLダンプ、物理バックアップ復元テスト、世代管理
アップロードファイル volume、bind mountS3など外部ストレージへの保管
Composeファイル compose.yaml、override、本番用環境変数の管理
シークレット DBパスワード、APIキー、証明書、復元時に必要な値
イメージ 再pullできるレジストリ、タグ、ロールバック先

Docker公式のバックアップ関連ドキュメントでも、volumesやbind mountsにデータを保存している場合、コンテナ自体のバックアップではなく、再作成に必要な設定やデータの扱いを意識する考え方が示されています。
データベースについては、volumeディレクトリを雑にコピーするだけではなく、DBの推奨するバックアップ手順も確認します。

事故4:ログが消える、追えない

コンテナが落ちたとき、ログが見られないと原因調査がかなり難しくなります。
docker logs で見られる範囲だけに頼っていると、コンテナ再作成やログローテーションで追えなくなることがあります。

本番では、少なくとも次を決めます。

  • アプリログを標準出力へ出すか、ファイルへ出すか
  • ログローテーションをどうするか
  • Dockerのlogging driverをどう使うか
  • エラー通知をどこへ飛ばすか
  • コンテナ再起動前後のログを追えるか
  • ホスト側のsyslog、journald監視サービスとどうつなぐか

ログは「障害が起きたあとに見るもの」ではなく、障害時に自分を助けるための事前準備です。
小規模でも、最低限はアプリエラー、コンテナ再起動、ディスク不足、メモリ不足を見られるようにしておきます。

事故5:不要なポートを公開する

Dockerでは、ポート公開の指定を間違えると、想定外に外から接続できることがあります。
特に危険なのは、MySQLPostgreSQLRedis、管理用UIなどをインターネットへ直接公開してしまうことです。

services:
  db:
    image: mysql:8.4
    ports:
      - "3306:3306"

ローカル開発では便利でも、本番では危険なことが多いです。
同じComposeファイルを開発と本番で使い回すと、この種の設定が残りやすくなります。

確認するポイントは次の通りです。

  • 本当に外部公開が必要なポートだけ開いているか
  • データベースやRedisを外部公開していないか
  • 管理画面はIP制限や認証で守っているか
  • ホストのファイアウォールも確認したか
  • クラウド側のセキュリティグループも確認したか

アプリコンテナ同士の通信は、Dockerネットワーク内だけで足りることが多いです。
外部に開くのは、通常はリバースプロキシやWeb入口だけに絞ります。

事故6:root実行と強すぎる権限

Dockerコンテナ内でrootとして動かすこと自体が、常に即アウトというわけではありません。
ただし、本番では不要なroot実行、過剰なLinux capabilities、Dockerソケットのマウント、privileged実行はかなり慎重に扱うべきです。

Docker公式のセキュリティドキュメントでも、コンテナは非特権ユーザーでプロセスを実行する方が望ましく、必要なcapabilityだけに絞る考え方が示されています。

危険になりやすい例です。

  • --privileged を理由なく使う
  • /var/run/docker.sock をコンテナへマウントする
  • rootで動かす必要がないアプリをrootで動かす
  • ホストの広いディレクトリをbind mountする
  • 書き込み不要な場所まで書き込み可能にする

本番では、アプリユーザーを分ける、read-onlyにできる場所はread-onlyにする、必要なcapabilityだけにする、ホストへのマウントを最小化する、という地味な対策が効きます。

事故7:ホストOSとDocker Engineを放置する

コンテナを使っていても、ホストOSは消えません。
Docker Engine、Linuxカーネル、ファイアウォールSSH、ディスク、メモリ、証明書、時刻同期などは、普通に本番運用の対象です。

よくある失敗は、アプリコンテナだけ更新して、ホスト側を何年も放置することです。
この状態だと、OSの脆弱性、Docker Engineの古さ、ディスク枯渇、ログ肥大化、証明書期限切れが事故になります。

最低限、次を見ます。

  • OS更新方針
  • Docker Engine更新方針
  • ディスク容量監視
  • メモリ不足やOOM監視
  • SSH鍵、MFA、IP制限
  • 証明書とドメイン期限
  • 不要なコンテナ、イメージ、volumeの棚卸し

Dockerはアプリを包む道具ですが、サーバー運用を消してくれる道具ではありません。

事故8:デプロイ手順が人によって違う

本番デプロイが「担当者の手元メモ」だけだと、事故が起きやすくなります。
特に、SSHして手作業、サーバー上でgit pull、サーバー上でbuild、環境変数を手で編集、という流れは、最初は速いですが再現性が落ちます。

本番デプロイでは、最低限次を決めます。

  1. どのブランチ、どのコミットを出すか
  2. どこでDockerイメージをbuildするか
  3. どのタグをpushするか
  4. 本番サーバーでどのタグをpullするか
  5. docker compose config で設定を確認するか
  6. 反映後にどのURL、ログ、ヘルスチェックを見るか
  7. 失敗時にどのタグへ戻すか

小さなサービスでも、デプロイ手順とロールバック手順は文章で残した方がよいです。
「たぶんこのコマンド」で本番を触る回数を減らすだけでも、事故はかなり減ります。

本番前チェックリスト

Docker本番運用前に、最低限次を確認します。

カテゴリ チェック項目
イメージ タグ固定、レジストリ、ロールバック先、不要なlatest利用がない
データ volume、bind mount、外部ストレージの役割が分かる
バックアップ DB、アップロード、設定、シークレット復元できる
ネットワーク 不要なポートを公開していない。DBRedisを外へ出していない
ログ エラー、再起動、アクセス、ホスト状態を追える
監視 死活監視、ディスク、メモリ、証明書、バックアップ失敗を検知できる
権限 root実行、privileged、Dockerソケット、広すぎるマウントを見直した
デプロイ 手順、確認項目、ロールバック先、担当者が決まっている

このチェックリストを見て不安が多いなら、Dockerをやめるべきというより、本番運用の前提を整える段階です。
まずはデータ、バックアップ、ログ、監視、デプロイ手順を固めると、Docker運用はかなり安定します。

小規模運用での現実的な構成

小規模サービスなら、いきなりKubernetesまで行かなくても構いません。
現実的には、次のような構成から始めることが多いです。

  • アプリはDockerイメージ化する
  • 単一サーバーならDocker Composeで起動する
  • データベースはvolumeか、重要ならマネージドDBへ逃がす
  • アップロードファイルはS3など外部ストレージも検討する
  • NginxCaddyを前段に置く
  • バックアップと復元手順を作る
  • 死活監視とログ確認を入れる

Kubernetesが必要かは、Kubernetesは小規模サービスに必要?やりすぎになる判断基準 で整理しています。
Docker Compose本番運用の判断は、Docker Composeは本番で使っていい?小規模運用の判断基準と注意点 が近いです。

まとめ

Docker本番運用でよくある事故は、コンテナ技術そのものより、運用の抜け漏れから起きます。
latestタグ、volume削除、バックアップ未確認、ログ消失、不要なポート公開、強すぎる権限、ホストOS放置、手作業デプロイは、どれも小規模運用で起こりやすい事故です。

本番でDockerを使うなら、アプリをコンテナ化するだけでなく、データをどこに置くか、どう戻すか、どのログを見るか、どのポートを開くか、どのタグを動かすかを決めます。
派手な構成にする必要はありません。むしろ小規模では、分かる範囲を狭くして、確実に戻せる状態を作る方が強いです。

参考情報

あとで見返すならここで保存

読み終わったあとに残しておきたい記事は、お気に入りからまとめて辿れます。