Я пытаюсь создать образ Docker, используя библиотеки Docker API и Docker Go (https://github.com/docker/engine-api/). Пример кода:
package main
import (
"fmt"
"github.com/docker/engine-api/client"
"github.com/docker/engine-api/types"
"golang.org/x/net/context"
)
func main() {
defaultHeaders := map[string]string{"User-Agent": "engine-api-cli-1.0"}
cli, err := client.NewClient("unix:///var/run/docker.sock", "v1.22", nil, defaultHeaders)
if err != nil {
panic(err)
}
fmt.Print(cli.ClientVersion())
opt := types.ImageBuildOptions{
CPUSetCPUs: "2",
CPUSetMems: "12",
CPUShares: 20,
CPUQuota: 10,
CPUPeriod: 30,
Memory: 256,
MemorySwap: 512,
ShmSize: 10,
CgroupParent: "cgroup_parent",
Dockerfile: "dockerSrc/docker-debug-container/Dockerfile",
}
_, err = cli.ImageBuild(context.Background(), nil, opt)
if err == nil || err.Error() != "Error response from daemon: Server error" {
fmt.Printf("expected a Server Error, got %v", err)
}
}
Ошибка всегда одна и та же:
Ответ об ошибке от демона: не удается найти указанный файл Docker: dockerSrc / docker-debug-container / Dockerfile
or
Ответ об ошибке от демона: не удается найти указанный файл Dockerfile: файл Dockerfile
Что я проверил:
- Папка существует в пути сборки
- Я пробовал как относительный, так и абсолютный путь
- В пути нет софтлинков
- Я пробовал ту же папку для двоичных файлов и
Dockerfile
docker build <path>
работает- и куча прочего
Другой вариант заключался в использовании RemoteContext
, который выглядит так, как будто он работает, но только для полностью автономных файлов докеров, а не для файлов с «присутствием локального файла».
Обновление. Пытался передать tar
в качестве буфера, но получил тот же результат со следующим:
dockerBuildContext, err := os.Open("<path to>/docker-debug- container/docker-debug-container.tar")
defer dockerBuildContext.Close()
opt := types.ImageBuildOptions{
Context: dockerBuildContext,
CPUSetCPUs: "2",
CPUSetMems: "12",
CPUShares: 20,
CPUQuota: 10,
CPUPeriod: 30,
Memory: 256,
MemorySwap: 512,
ShmSize: 10,
CgroupParent: "cgroup_parent",
// Dockerfile: "Dockerfile",
}
_, err = cli.ImageBuild(context.Background(), nil, opt)