failed to compute cache key: failed to calculate checksum of ref ...: "/target/app.jar": not found は、Dockerfile の COPY で指定したファイルが、ビルドに渡したフォルダ(ビルドコンテキスト)の中に見つからないときのエラーです。 「キャッシュ」という言葉が入っていますが、キャッシュを消しても直りません。

エラー文の最後の "/target/app.jar" が、見つからなかったパスです。先頭の / は、ビルドコンテキストのフォルダを表します。

原因 確かめ方 直し方
COPY のパスが、ビルドコンテキストから見て違う docker build . の . から見たパスか ビルドコンテキストから見たパスに直す
.dockerignore で除外している .dockerignore に target などがあるか 除外をやめる、または ! で例外にする
Dockerfile のあるフォルダで docker build . した Dockerfile が docker/ などの下にあるか 上のフォルダで docker build -f docker/Dockerfile .
COPY ../... で外のファイルを指した ../ があるか ビルドコンテキストを広げる
マルチステージの COPY --from のパスが違う 前のステージで作ったパス 前のステージのパスに合わせる
大文字小文字が違う App/ と app/ 実際の名前に合わせる

確認環境:Docker Engine 29.4.3(BuildKit)、buildx 0.33.0 で再現しました(確認日 2026年10月11日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Docker failed to compute cache keyの直し方」

ビルドコンテキスト(docker build . の「.」)とは

proj/                      ← docker build . をここで実行すると、proj がビルドコンテキスト
├── Dockerfile
├── app/
│   ├── config.txt
│   └── target/
│       └── app.jar
└── docker/
    └── Dockerfile

docker build . の最後の . は「このフォルダの中身をビルドに渡す」という意味です。 Docker の公式ドキュメントでは、ビルドコンテキストは「ビルドがアクセスできるファイルの集まり」で、COPY・ADD はその中のファイルを参照できると説明されています。COPY のパスは、Dockerfile の場所ではなく、ビルドコンテキストから見たパスです。

再現① COPY のパスが違う

FROM bb:1
COPY target/app.jar /app.jar
Dockerfile:2
--------------------
   1 |     FROM bb:1
   2 | >>> COPY target/app.jar /app.jar
--------------------
ERROR: failed to build: failed to solve: failed to compute cache key: failed to calculate checksum of ref 0hy7s7o90zcvnd5j0tzlnl263::wkap9la13fefta7t17snv7wdc: "/target/app.jar": not found

proj から見ると、jar は app/target/app.jar にあります。 COPY app/target/app.jar /app.jar に直すと、ビルドが通りました。>>> の付いた行が、失敗した COPY です。

再現② .dockerignore で除外している

# .dockerignore
target
**/target
ERROR: ... failed to compute cache key: failed to calculate checksum of ref ...: "/app/target/app.jar": not found

ファイルは存在するのに、.dockerignore で除外されているため、ビルドには渡されません。 ビルドを速くするために target・build・node_modules を除外し、その中のファイルを COPY しようとして起きます。

.dockerignore COPY app/target/app.jar COPY app/config.txt
target と **/target not found 通る
* と !app/target/app.jar 通る not found

! を付けた行は、除外の例外になりました。 「すべて除外して、必要なものだけ ! で入れる」書き方では、入れ忘れたファイルが not found になります。

再現③ Dockerfile が別のフォルダにある

# proj/docker/Dockerfile
FROM bb:1
COPY app/target/app.jar /app.jar
実行した場所とコマンド ビルドコンテキスト 結果
proj/docker で docker build . proj/docker not found
proj で docker build -f docker/Dockerfile . proj 通った

-f は Dockerfile の場所、最後の . はビルドコンテキストです。 2つは別々に指定できます。

COPY ../ では、外のファイルを取れない

# proj/docker/Dockerfile2(proj/docker でビルド)
COPY ../app/target/app.jar /app.jar
ERROR: ... "/app/target/app.jar": not found

確認環境では、../ は無視され、ビルドコンテキストの中の /app/target/app.jar として探されました。 ビルドコンテキストの外のファイルは使えないので、上のように、ビルドコンテキストを上のフォルダにします。

再現④ マルチステージの COPY --from

FROM bb:1 AS build
RUN mkdir -p /work/out && echo x > /work/out/app.jar
FROM bb:1
COPY --from=build /work/target/app.jar /app.jar
間違い エラー
前のステージのパスが違う(/work/out に作ったのに /work/target) failed to compute cache key: ... "/work/target/app.jar": not found
ステージ名が違う(AS build なのに --from=builder) builder: failed to resolve source metadata for docker.io/library/builder:latest ... (did you mean build?)

ステージ名を間違えると、Docker Hub の builder というイメージを探しに行きました(確認環境では取得できずエラー)。メッセージの最後の (did you mean build?) が、正しいステージ名の手がかりです。

そのほかの形

書いた COPY 結果
COPY App/target/app.jar /app.jar(大文字) "/App/target/app.jar": not found
COPY app/target/*.war /app/(1つも一致しない) lstat /app/target: no such file or directory(メッセージの形が違う)

Linux 上の Docker では、大文字小文字が区別されます。 Windows・Mac で作ったフォルダ名の大文字小文字が、Dockerfile と違っていないかを確かめます。

ビルドに渡されたファイルを確かめる

# Dockerfile.ls(確認用)
FROM bb:1
COPY . /ctx
RUN find /ctx -type f | sort
docker build --progress=plain --no-cache -f Dockerfile.ls .
#7 0.173 /ctx/app/config.txt
#7 0.173 /ctx/app/target/app.jar
#7 0.173 /ctx/docker/Dockerfile

ビルドコンテキストの中身(.dockerignore で除外されたものを除く)が一覧で表示されます。 探しているファイルがこの一覧に無ければ、パスかビルドコンテキストか .dockerignore が原因です。

確認の手順(チェックリスト)

順番 確認すること 方法
1 not found のパス エラー文の最後の "/..."
2 ビルドコンテキストはどこか docker build の最後の引数
3 そのパスにファイルがあるか ビルドコンテキストから ls
4 .dockerignore で除外していないか target・build・*
5 Dockerfile が別のフォルダか -f と最後の . を分ける
6 先にビルドしたか app.jar は mvn package などの後にできる

6番のように、そもそも jar がまだ作られていない(ビルドを忘れた)こともあります。

よくある質問

Q. docker compose でビルドするときはどうなりますか。 A. compose.yaml の build.context がビルドコンテキスト、build.dockerfile が Dockerfile の場所です。Docker Compose v5.1.3 で、context: . と dockerfile: docker/Dockerfile を指定するとビルドが通り、context: docker にすると同じ not found になりました。Compose の書き方は、既存の記事「Docker Composeの使い方|compose.yamlの書き方と開発環境の作り方」で扱っています。

まとめ

  • COPY したファイルが、ビルドコンテキストの中に無いエラー。キャッシュは関係ない
  • COPY のパスは、Dockerfile の場所ではなく、ビルドコンテキスト(docker build . の .)から見たパス
  • .dockerignore で除外したファイルは、存在しても not found
  • 別の場所の Dockerfile は docker build -f docker/Dockerfile .
  • COPY ../ は外に出られない。ステージ名の間違いは did you mean が手がかり

参考・出典

確認日はいずれも 2026年10月11日です。

  • Docker Docs「Build context」:https://docs.docker.com/build/concepts/context/

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Docker failed to compute cache keyの直し方」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?