待ち時間を解消:Dockerの「Sending Build Context」によるフリーズの修正方法

beginner🐳 Docker2026-07-22| Docker Engine 20.10以降、Docker Desktop(macOS/Windows/Linux)

Error Message

Sending build context to Docker daemon [Size > 100MB]...
#docker#devops#パフォーマンス

問題点:ビルドが開始前にハングアップする理由docker build -t my-app . を実行して待機します。さらに待ちます。ステップが実行される代わりに、ターミナルはフラストレーションのたまる一行で止まったままになります:

Sending build context to Docker daemon  2.45GB

この数値が数GBに達している場合、ビルドは非常に遅くなります。Docker daemonが完全にクラッシュすることさえあります。これはDockerがクライアント・サーバー・アーキテクチャを採用しているために起こります。ビルドを実行すると、クライアントは現在のディレクトリ内のすべてのファイルをバンドルしてdaemonに送信します。この転送は、DockerがDockerfileの命令を確認する前に行われます。

コンテキスト肥大化の主な原因- ローカルの依存関係: node_modules(多くの場合500MB以上)、venvtargetなどのフォルダ。- バージョン管理: 長年のコミットで膨れ上がった .git ディレクトリ。- メディアとデータ: 忘れられたデータベースダンプ(.sql)、巨大なCSVファイル、または高解像度のアセット。- ビルド成果物: 古いバイナリ、ログファイル、または以前の実行で生成された dist フォルダ。## ステップ 1:肥大化の原因を特定するどのファイルが問題なのか推測するのはやめましょう。正確に何が容量を占有しているのかを特定する必要があります。プロジェクトのルートで以下のコマンドを実行して、フォルダサイズを確認してください:

Linux または macOS の場合:

du -sh * | sort -h

Windows (PowerShell) の場合:

ls | Select-Object Name, @{Name="Size(MB)";Expression={$_.Length / 1MB}} | Sort-Object "Size(MB)" -Descending

最終的なコンテナイメージに含める必要がまったくないディレクトリを探します。もし node_modules が800MBと表示されていれば、それが主なターゲットです。

ステップ 2:解決策 — .dockerignore ファイルを作成する最も効果的な解決策は、プロジェクトのルートに .dockerignore ファイルを作成することです。これは .gitignore と同じように動作します。Dockerクライアントに対し、特定のファイルをdaemonに送信せずに残しておくよう指示します。

ファイルを作成し、以下のよくある原因をすぐに追加してください:

# 依存関係を無視(これらは代わりにDockerfile内でインストールします) 
node_modules/
venv/
.venv/

# ソース管理を無視
.git
.gitignore

# IDEやOSのゴミを無視
.idea/
.vscode/
.DS_Store

# ビルド出力とログを無視
dist/
build/
*.log
*.sql
*.zip

ステップ 3:Docker BuildKit に切り替える最新のDockerバージョンには、よりスマートなビルドエンジンである BuildKit が含まれています。レガシーなビルダーとは異なり、BuildKitは COPYADD 命令で実際に要求されたファイルのみを転送します。これにより、2GBの転送が2MBに短縮されることもあります。

単一のビルドでBuildKitを使用するには、ターミナルで環境変数を設定します:

DOCKER_BUILDKIT=1 docker build -t my-app .

Linuxで恒久的に設定するには、/etc/docker/daemon.json を編集して以下を含めます:

{
  "features": {
    "buildkit": true
  }
}

ステップ 4:COPY 命令を見直す.dockerignore を使っていても、「怠慢な」Dockerfileは速度を低下させます。ファイルの冒頭でプロジェクト全体をコピーするのは避けましょう。これはレイヤーキャッシュを台無しにし、不要なデータ転送を強制します。

遅い方法:

COPY . . 
RUN npm install

プロフェッショナルな方法:

# 最初にマニフェストのみをコピー
COPY package.json package-lock.json ./
RUN npm install

# その後、残りのソースコードをコピー
COPY ./src ./src

結果:一瞬で終わるビルドビルドを再実行し、出力の最初の行を確認してください。以下のように表示されれば成功です:

Sending build context to Docker daemon  142kB

サイズが数GBから数KBに激減しました。「Sending build context」フェーズは一瞬で終わるはずです。ビルドはDockerfileの最初の命令へ直接進み、毎日発生していた数分間のアイドル時間を節約できます。

Related Error Notes