我试着用Golang构建一个码头形象,但是{"message": "COPY failed: no source files were specified"}," error": "COPY failed: no source files were specified"}
失败了
这是我的密码
package main
import (
"archive/tar"
"bytes"
"context"
"fmt"
"io"
"io/ioutil"
"os"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func buildImage(client *client.Client, tags []string, dockerfile string) error {
ctx := context.Background()
// Create a buffer
buf := new(bytes.Buffer)
tw := tar.NewWriter(buf)
defer tw.Close()
// Create a filereader
dockerFileReader, err := os.Open(dockerfile)
if err != nil {
return err
}
// Read the actual Dockerfile
readDockerFile, err := ioutil.ReadAll(dockerFileReader)
if err != nil {
return err
}
// Make a TAR header for the file
tarHeader := &tar.Header{
Name: dockerfile,
Size: int64(len(readDockerFile)),
}
// Writes the header described for the TAR file
err = tw.WriteHeader(tarHeader)
if err != nil {
return err
}
// Writes the dockerfile data to the TAR file
_, err = tw.Write(readDockerFile)
if err != nil {
return err
}
dockerFileTarReader := bytes.NewReader(buf.Bytes())
buildOptions := types.ImageBuildOptions{
Context: dockerFileTarReader,
Dockerfile: dockerfile,
Remove: true,
Tags: tags,
}
// Build the actual image
imageBuildResponse, err := client.ImageBuild(
ctx,
dockerFileTarReader,
buildOptions,
)
if err != nil {
return err
}
// Read the STDOUT from the build process
defer imageBuildResponse.Body.Close()
_, err = io.Copy(os.Stdout, imageBuildResponse.Body)
if err != nil {
return err
}
return nil
}
下面是我的文件夹结构,它试图使用src的Dockerfile构建一个坞映像。我想要考虑所有的文件在src
内的码头建设。
-- root
|-- src
|--Dockerfile
|--files
|-- go-code
|--build.go
Dockerfile
FROM node:12
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "index.js" ]
详细错误信息:
{"errorDetail":{"message":"COPY failed: no source files were specified"},"error":"COPY failed: no source files were specified"}
发布于 2020-09-25 06:34:53
这取决于你要把你的码头建设从哪里来。就像。
-- root
|-- src
|--Dockerfile
|--files
|-- go-code
|--build.go
如果要复制/root/src/files/
中的文件,则需要将cd复制到/root/src
文件夹。在这种情况下,docker命令应该是:docker built -t <tagname> .
在你的例子中,第一个“。在COPY命令中,将尝试从运行build.go的目录复制。
这可能就是你的脚本失败的原因。
https://stackoverflow.com/questions/64052273
复制相似问题