テクノロジー · 実用ガイド

Docker build の COPY で source not found?Dockerfile 修正前に実際の context を監査

COPY が読めるのは checkout、生成、ignore 後の build context だけです。command と snapshot を保存し、一つの境界だけを修正します。

Original ja diagram of Docker context selection and COPY visibility.
オリジナルイラスト:COPY は filter 後の selected context だけを読みます。 Watch at Ease

Docker COPY failure は host に file がない証明ではありません。BuildKit が受け取った filtered context にないか、別の stage、image、named context を読んでいます。

command と error を保存し、context type、checkout、ignore、source kind を証明します。context を広げたり secret を含めたりせず、一つだけ修正します。

command と context を保存

error、cwd、version、builder、Dockerfile、最後の context argument を記録します。

local、Git、tar、named、empty context を分類します。

checkout と生成を証明

case、sparse checkout、submodule、LFS、checkout path を実際の snapshot で確認します。

生成 file の場所を記録し、default Git context が runner mutation を読まない点を確認します。

有効な ignore を計算

root と Dockerfile-specific ignore を順に読み、優先と last match を確認します。

broad rule を消したり secret を COPY したりせず、最小 exception にします。

default と --from を分離

plain COPY は default context、--from は stage/image/named context root を読みます。

`../` では逃げず、必要なら狭い named context を宣言します。

一変更して検証

context、checkout、generation、case、ignore、Git/path、--from の一つだけを直します。

fresh build record と最終 artifact を確認し、CI でも同じ契約を再現します。

Original ja diagram of absent, ignored and --from source branches.
オリジナルイラスト:missing source を分類してから一つだけ直します。 Watch at Ease