Docker の failed to solve エラー:原因と解決策
冒頭まとめ ERROR: failed to solve: を原因名として検索しているなら、探す場所がずれています。この一行は1つの部品が出した文言ではなく、3か所が順に書き足した結果です。 先頭の ERROR: を付けるのは buildx の入口部分です(cmd/buildx/main.go)。続く failed to solve は、BuildKit のクライアントがビルドサーバーから受け取ったエラーを包む語です(client/solve.go)。コロンより後ろが、失敗した部品の言い分です。 読むのはコロンの直後です。 process "..." なら実行を担う部分、failed to resolve source metadata for ならイメージ参照の解決、failed to compute cache key なら solver、failed to prepare ならキャッシュ管理が書き手です。failed commit on ref に至っては BuildKit ですらなく、同梱の containerd が出しています。 もう1つの読みどころが ------ Dockerfile:3 ------ の囲みです。エラーに Dockerfile 上の位置情報が付いているときだけ出ます(solver/errdefs/source.go)。囲みの有無で、疑う対象が Dockerfile の中身か外側かに分かれます。 エラーの概要 BuildKit のビルドは、Dockerfile を内部表現へ変換する段、イメージ参照を解決する段、コマンドを実行する段、書き出す段の順に進みます。failed to solve は全体を包む外枠で、どの段で止まっても先頭は同じです。区別できるのは後ろだけです。 型1:ステップ見出しと Dockerfile の囲みを伴う > [2/2] RUN apk add --no-cache bash: ... exited with error 127 2 errors ------ Dockerfile:3 -------------------- 1 | FROM alpine:3.23 2 | 3 | >>> RUN apk add --no-cache bash 4 | -------------------- ERROR: failed to build: failed to solve: process "/dev/.buildkit_qemu_emulator /bin/sh -c apk add --no-cache bash" did not complete successfully: exit code: 2 > [2/2] がステップ番号、>>> の行が失敗した命令、区切りの手前の exited with error 127 がコマンド自身の出力です。末尾の exit code: 2 は結果であり、理由ではありません。 ...