使用gosdk从Dockerfile创建Docker映像,复制失败:stat/var/lib/Docker/tmp/Docker-builder689084003/
我的代码如下: 包干管使用gosdk从Dockerfile创建Docker映像,复制失败:stat/var/lib/Docker/tmp/Docker-builder689084003/,docker,Docker,我的代码如下: 包干管 import ( "archive/tar" "bytes" "context" "io" "io/ioutil" "log" "os" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) func main() { ctx := context.Background() cli,err:
import (
"archive/tar"
"bytes"
"context"
"io"
"io/ioutil"
"log"
"os"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func main() {
ctx := context.Background()
cli,err:=client.NewClientWithOpts(client.FromEnv,client.WithAPIVersionNegotiation())
if err != nil {
log.Fatal(err, " :unable to init client")
}
buf := new(bytes.Buffer)
tw := tar.NewWriter(buf)
defer tw.Close()
dockerFile := "myDockerfile"
dockerFileReader, err := os.Open("/home/aungkokolin/Projects/Proj/src/Dockerfile")
if err != nil {
log.Fatal(err, " :unable to open Dockerfile")
}
readDockerFile, err := ioutil.ReadAll(dockerFileReader)
if err != nil {
log.Fatal(err, " :unable to read dockerfile")
}
tarHeader := &tar.Header{
Name: dockerFile,
Size: int64(len(readDockerFile)),
}
err = tw.WriteHeader(tarHeader)
if err != nil {
log.Fatal(err, " :unable to write tar header")
}
_, err = tw.Write(readDockerFile)
if err != nil {
log.Fatal(err, " :unable to write tar body")
}
dockerFileTarReader := bytes.NewReader(buf.Bytes())
imageBuildResponse, err := cli.ImageBuild(
ctx,
dockerFileTarReader,
types.ImageBuildOptions{
Context: dockerFileTarReader,
Tags: []string{"python"},
Dockerfile: dockerFile,
Remove: true})
if err != nil {
log.Fatal(err, " :unable to build docker image")
}
defer imageBuildResponse.Body.Close()
_, err = io.Copy(os.Stdout, imageBuildResponse.Body)
if err != nil {
log.Fatal(err, " :unable to read image build response")
}
}
“消息”:“复制失败:stat/var/lib/docker/tmp/docker-builder689084003/python项目tic tac toe:没有这样的文件或目录”},“错误”:“复制失败:stat/var/lib/docker/tmp/docker-builder689084003/python项目tic tac toe:没有这样的文件或目录”}
您是否也可以共享dockerfile(或复制相同问题的简化版本)?属于容器的所有文件都必须添加到tar文件中。因此,您添加了一个docker文件,它引用了其他文件,但您从未将这些其他文件添加到您创建的tar中。