したがって、私はGolang SDKを使用してDockerイメージを構築しようとしていますが、COPYを使用してイメージにファイルをコピーするDockerfileのセクションを除くすべてが実行されます。
COPY testfile.txt /testfile.txt
私のコードは次のとおりです:
func buildImage() {
// Run in directory where Dockerfile is found
os.Chdir("build-dir")
cli, err := client.NewEnvClient()
if err != nil {log.Fatal(err, " :unable to init client")}
// Image Build requiresa tar file
tar := new(archivex.TarFile)
tar.Create("dockerfile.tar")
tar.AddAll(".", true)
tar.Close()
// Use tar file as docker context
dockerBuildContext, err := os.Open("dockerfile.tar")
defer dockerBuildContext.Close()
options := types.ImageBuildOptions{
SuppressOutput: false,
Remove: true,
ForceRemove: true,
PullParent: true,
Tags: []string{"latest"},
Dockerfile: "Dockerfile",
}
buildResponse, err := cli.ImageBuild(context.Background(), dockerBuildContext, options)
defer buildResponse.Body.Close()
if err != nil {
log.Fatal(err, " :unable to build docker image")
}
// Copy out response of stream
_, err = io.Copy(os.Stdout, buildResponse.Body)
if err != nil {
log.Fatal(err, " :unable to read image build response")
}
}
コードは失敗します:
{
"errorDetail": {
"message":"COPY failed: stat /var/lib/docker/tmp/docker-builder264844317/testfile.txt: no such file or directory"
},
"error":"COPY failed: stat /var/lib/docker/tmp/docker-builder264844317/testfile.txt: no such file or directory"
}
これまでのところ、ビルドする前にファイルをtarにコピーしてtextfile.txt
から、コマンドを実行するディレクトリにファイルを移動しようとしましたが、まだこの時点を過ぎているようには見えません
追加情報:
ファイルは、Dockerfileと同じディレクトリにあります。
-- build-dir
|-- Dockerfile
|-- testfile.txt
ソースから
docker buildコマンドは、Dockerfileと「コンテキスト」からDockerイメージをビルドします。ビルドのコンテキストは、指定されたPATHまたはURLにあるファイルのセットです。ビルドプロセスは、コンテキスト内の任意のファイルを参照できます。たとえば、ビルドではCOPY命令を使用して、コンテキスト内のファイルを参照できます。
Dockerビルドコンテキストは、Dockerエンジンに送信するディレクトリ全体です。イメージをビルドしている間、Dockerエンジンはビルドコンテキストのルートからファイルを見つけようとします。
あなたの場合、ファイルはビルドコンテキストに追加されていません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加