【发布时间】:2019-08-13 12:26:01
【问题描述】:
所以我正在尝试使用 Golang SDK 构建一个 docker 镜像,除了 Dockerfile 中我使用 COPY 将文件复制到镜像中的部分之外,所有内容都运行:
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 将从根目录(即保存 you
Dockerfile的位置)中查找文件testfile.txt。所以请确保 testfile 和 Dockerfile 在同一级别。 -
同级(问题更新显示)
-
不过,你可以试试这个,看看它是否有效 -
COPY build-dir/testfile.txt /testfile.txt? -
我仍然遇到同样的错误
-
奇怪。我的疑问来自
tar.AddAll(".", true)这一行,您说要在当前目录中添加所有文件。我假设您的 tar 程序没有将 build-dir 作为您的上下文根。你能打印出dockerBuildContext的值吗?