Попытка построить Docker изображение с помощью докер API и Docker Go библиотеки: https://github.com/docker/engine-api/Построить Docker Image От Go кодекса
Пример кода:
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)
}
- Папка существует в пути сборки
- Пробовал относительная и абсолютный путь
- Никаких программных ссылок на пути
- Пробовал то же самое Папка для двоичной и Dockerfile
- докер строительные работы
- и кучу других вещей
ошибки всегда одинаков:
Error response from daemon: Cannot locate specified Dockerfile: dockerSrc/docker-debug-container/Dockerfile
или
Error response from daemon: Cannot locate specified Dockerfile: Dockerfile
Другой вариант заключается в использовании RemoteContext, который выглядит как работает, но это прекрасно только для полностью автономных док-файлов ... и не те, с «локальным присутствием файла»
Update: Пробовал прохождение смолы в качестве буфера, но тот же самый материал:
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)
Я закончил делать это:/Так выглядит как-то способ сделать это сейчас. – Mangirdas
Вам не нужно называть close на dockerBuildContext; 'defer dockerBuildContext.Close()' Это потому, что cli.ImageBuild называет go net/http client; https://github.com/moby/moby/blob/master/client/image_build.go#L34 И клиент go всегда закрывает тело запроса по умолчанию; https://github.com/golang/go/blob/c8aec4095e089ff6ac50d18e97c3f46561f14f48/src/net/http/client.go#L472 – Komu