- Docker
Docker failed to compute cache keyの直し方
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期連続の黒字決算。